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

Vic*_*voy 5 c++ enums boost

正在看一下boost asio ssl_client.cpp的例子,发现这是正确的:

enum { max_length = 1024 };
Run Code Online (Sandbox Code Playgroud)

不知道,这和之间有什么区别

namespace {
    const int max_length = 1024;
}
Run Code Online (Sandbox Code Playgroud)

要么

static const int max_length = 1024;
Run Code Online (Sandbox Code Playgroud)

或者它们绝对平等,但这只是更短?

seh*_*ehe 3

如果您将其用作值而不是引用,那么它们是等效的。

\n\n

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

\n\n
struct X {\n    enum { id = 1 };\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

更新

\n\n

现在酷孩子都这样做:

\n\n
struct X {\n    static constexpr int id = 1;\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者他们与 Scott Meyer\xc2\xb9 一起写:

\n\n
struct X {\n    static const int id = 1;\n};\n\n// later, in a cpp-file near you:\nconst int X::id;\n\nint main() {\n    int const* v = &X::id; // can use address!\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xc2\xb9 请参阅仅声明整型静态 const 和 constexpr 数据\n成员,项目 #30

\n

  • 你说“曾经是”。愿意解释一下现在酷孩子们在做什么吗? (2认同)