因为 c++ 枚举的 c++ 底层类型应该是 int。
但是有代码
enum class Properties{ first , second }
void tmp ( int i ) {}
tmp( Properties::first )
编译器提示 Properties::first 不是 int 而是 Properties 类型。
我真的必须将它转换为 int 才能将枚举值传递给函数吗?还是有解决方法?
感谢您的帮助。
最佳答案
Properties
是一个作用域枚举 类型。那是因为您在定义它时使用了 class
关键字。作用域枚举不能隐式转换为它们的基础类型(或任何整型,就此而言)。这是设计使然。
如果您想要转换,只需将其设为无作用域枚举即可:
enum Properties{ first , second };
还有使用命名空间的妥协:
namespace Properties {
enum { first , second };
}
这将通过完全限定的 ID 为您提供所需的访问权限,同时保留隐式转换。
关于c++ - 枚举值的类型不是 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47501151/