c++ - 枚举值的类型不是 int?

标签 c++ c++11 enums

因为 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/

相关文章:

c - 枚举无法理解内存和功能

c - C语言中 'enum'的值是如何存储的?

c++ - 如何拥有按值 vector 并结合使用指针 vector ?

c++ - 有没有办法标记一个 .wav 文件并在其中写入时间?

c++ - 类命名空间内的模板特化

templates - 模板上的 begin() 和 end() 自由函数重载

c++ - FindCirclesGrid c++11 不起作用,尽管检测器找到了所有点

c++ - std::unordered_map<std::String, myClass*> - std::unordered_map::erase() 是否调用 myClass 的 DTor?

c# - 将枚举值添加到简单的组合框

c++ - 为什么使用CoInitialize(0);在 C++ 中