【问题标题】:Nameless enums in templates模板中的无名枚举
【发布时间】:2009-03-03 19:28:51
【问题描述】:

很多模板代码如下所示:

template <typename T>
class foo
{
   enum { value = <some expr with T> };
};

可以在素数检查程序中看到here 的示例,我也曾在 Factorial 实现中看到过它。

我的问题是为什么要使用无名枚举?这有什么特别的原因吗? 例如,静态 const int 也可以工作?

编辑:

@Benoît:感谢您的链接,它提供了我正在寻找的见解!

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

    静态 const 变量会占用内存(就像 Sean 所说的那样),而枚举不占用任何内存。它们只存在于编译器的世界中。在运行时,它们只是常规整数。

    除了编译器对标准的错误实施之外,它会起作用。

    在 boost 邮件列表中有一个完整的 thread 主题:

    【讨论】:

    • @underscore_d 你能给我任何例子来探索 enum 和 const 在大小上的不同吗?
    • 我说过const[expr] 的成员会增加sizeof(Obj),特别是static 的成员,但回想起来,我认为我是个白痴。我应该说过'static const[expr] 变量可能会在可执行映像中分配空间,可能还有RAM',但不是每个实例——原因很明显:它们是静态的。现在我要去测试琐碎的static const[expr] 常量是否像enums 一样被编译器内联。
    【解决方案2】:

    如果我没记错的话,静态 const 需要您通过声明和定义变量来分配空间,而未命名的枚举则不需要。

    【讨论】:

    • 肖恩你能用一个例子来探索你的答案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多