正在查看boost asio ssl_client.cpp example,发现这是正确的:
enum { max_length = 1024 };
不知道,这与
有什么区别namespace {
const int max_length = 1024;
}
或
static const int max_length = 1024;
或许他们绝对平等,但这只是更短?
答案 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}}似乎是唯一的方法。
也许很少见,但非常这种做法的正确理由。