编写static const uint变量和匿名枚举变量有什么区别?

时间:2015-11-11 14:24:34

标签: c++ boost enums

正在查看boost asio ssl_client.cpp example,发现这是正确的:

enum { max_length = 1024 };

不知道,这与

有什么区别
namespace {
    const int max_length = 1024;
}

static const int max_length = 1024;

或许他们绝对平等,但这只是更短?

2 个答案:

答案 0 :(得分:3)

如果您将其用于值,则它们是等效的,而不是通过引用。

enum { constantname = initializer };习惯用法在头文件中非常流行,因此您可以在类声明中使用它而不会出现问题:

struct X {
    enum { id = 1 };
};

因为使用静态const成员,您需要一个类外的初始化程序,它不能在头文件中。

更新

酷孩子这几天都这样做:

struct X {
    static constexpr int id = 1;
};

或者他们选择ScottMeyer¹并写道:

struct X {
    static const int id = 1;
};

// later, in a cpp-file near you:
const int X::id;

int main() {
    int const* v = &X::id; // can use address!
}

¹见Declaration-only integral static const and constexpr data members, Item #30

答案 1 :(得分:0)

绝对值得一提的是,在一个类中,enum值声明不会消耗存储,而const[expr] int的各种风格最终会占用4/8 /多个字节。

因此,如果某人需要一个结构只包含占用定义字节数的其他成员(例如,一个POD从另一个系统映射到一个字节结构),则将常量指定为{{ 1}}似乎是唯一的方法。

也许很少见,但非常这种做法的正确理由。