使用静态const结构对相关的类常量进行分组(C++ 11)

Sta*_*zer 4 c++ c++11

使用以下(A)的(dis)优势是什么:

// .h
class SomeClass
{
    static const struct ConstantGroup
    {
        int a = 1;
        string b = "b";
        // ... etc.
    } CONSTANT;
};
// .cpp
const SomeClass::ConstantGroup SomeClass::CONSTANT;
Run Code Online (Sandbox Code Playgroud)

与(B):

// .h
class SomeClass
{
    static const int A;
    static const string B;
    // .. etc.
};
// .cpp
const int SomeClass::A = 1;
const string SomeClass::B = "b";
Run Code Online (Sandbox Code Playgroud)

...对于某些相关静态类常量的组?假设不涉及模板,并且常量包含简单类型(POD或字符串).

到目前为止,我看到有利于(A)的以下优点:

  • 相关的常量可以作为一组编辑传递:正如评论中指出的那样,这通常不是所希望的.
  • 鉴于常量通常一起访问,我们可以为结构创建缩写,以便在需要时提高可读性,即: static const auto & SHORTHAND = SomeClass::LONG_NAME_FOR_CONSTANTS;

使用此模式时,要记住哪些缺点,问题或其他因素?

Phi*_*970 6

(A)通过从最终可执行文件中删除不必要的变量来进行优化可能更难.

如果要对常量进行分组,请考虑使用a namespace来实现此目的.

namespace ConstantGroup
{
    constexpr int a = 1;

    // Here best solution might depend on usage and c++ version
    const std::string b;    
}
Run Code Online (Sandbox Code Playgroud)

将常量作为一个组传递真的没有多大意义.如果某些东西确实是恒定的,那么你需要一个单一的定义并且总是使用它.

此外,如果常量非常特定于一个类,则将其设为该类的(静态)成员.