我可以使用枚举类值作为变量函数的参数吗?
Can I use enum class values as arguments to varargs functions?
c++ 11增加了枚举类,它们是强类型的枚举——枚举类的值不会隐式地转换为其他枚举类的值或整数,并且通过显式的大小说明符允许前向声明。
是否有可能将这些枚举的值传递给变量函数并保持在标准定义的行为内?在实现定义的行为中?
可以。5.2.2/7明确允许任何枚举类型的参数。无作用域的枚举值是整型提升的,但有作用域的枚举(enum class
)不是。
当然,在函数的实现中你仍然需要小心。
我认为答案是它可以是安全的:
VA_ARGS
要求参数为POD,据我所知,这并没有改变。
我不明白为什么:
enum class foo { bar=1 };
不符合POD-ness的要求
当您在使用可变参数时丢弃了一些类型信息(这就是为什么强烈不鼓励使用非POD类型),您将只在使用函数的可变参数的另一端接收底层类型。默认为int
,但您可以更改它(例如enum class MyEnum : char { ... };
)
更正: varargs确实不会丢弃所有类型信息,如果您使用POD数据类型,您应该是相当安全的。
相关文章:
- 未使用的C++未优化的静态成员函数/变量
- 内联函数/变量的外部链接
- 同一函数中的静态函数变量初始化顺序
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 如何从doxygen输出中排除类的无证件成员函数/变量
- 如何在LUA C API中分配全局LUA函数变量
- 如何将函数变量传递给C lambda函数
- 通过另一个C++函数更改函数变量
- c++11 lambda 真的支持闭包吗?函数变量中存在语义冲突
- C++:静态成员不能在声明时定义,但静态函数变量可以?
- apache-frift是否支持函数变量作为参数
- 类函数/变量在使用之前必须声明
- 函数变量去哪里
- 无法使用函数变量?错误表达式必须具有类类型
- 如何在main中使用函数变量
- 每当尝试打印函数变量时,C++ cout 错误
- 是否存在查看成员函数/变量的整洁等效项
- 访问友元类之间的函数变量
- 函数到函数变量
- 一个定义规则是否强制创建一个静态函数变量