我有一个非常具体的问题;在类外声明枚举以及在类中声明枚举时,性能是否有任何差异? 谢谢!
答案 0 :(得分:3)
不,没有性能差异。
在类范围中声明的任何enum
或enum class
都将其名称限定在班级' name(在某种意义上,类的名称也是命名空间);并且执行了access checking。
这里唯一真正的区别是访问检查,否则,命名空间点不是问题,因为C ++中的每个名称都在某个命名空间内被删除(无论是否为全局)。
没有性能影响。
答案 1 :(得分:0)
我刚刚实现了两种变体并查看了它们的objdumps。它们完全相同,所以没有性能差异。不同之处仅在于代码风格。
答案 2 :(得分:0)
性能差异为零。封闭类只会影响enum
的名称和enum
可见的名称。
整个差异如下所示;看看静态断言如何引用两个foo
,它们对x
的含义有不同的看法。
const int x = 3;
enum foo { z = x };
struct bar {
static const int x = 4;
enum foo { z = x };
};
static_assert(z == 3, "from ::x");
static_assert(bar::z == 4, "from bar::x");