很多模板化的代码看起来像这样: template <typename T> class foo { enum { value = <some expr with T> }; }; 可以在素数检查程序中这里看到一个示例,我曾经在阶乘实现中也看到过它。我的问题是为什么使用无名枚举?有特别的原因吗?例如,静态const int 也可以工作吗?编辑:@Benoît:谢谢链接,它提供了我正在寻找的洞察力!
一个静态常量变量将占用内存(就像Sean所说的那样),而枚举类型不占用任何内存。它们只存在于编译器的世界中,在运行时它们只是普通的整数。 除此之外,它可以正常工作,除非编译器实现标准有问题。 在boost邮件列表中有一篇详细的主题帖。
const[expr]
成员会增加sizeof(Obj)
,特别是指static
的那些,但回想起来,我觉得我很蠢。我应该说'static const[expr]
变量可能会在可执行映像和可能的RAM中分配空间,但不是每个实例-有一个非常明显的原因:它们是静态的。现在我要测试是否像enum
一样,编译器会将微不足道的static const[expr]
常量进行值内联。 - underscore_d