代码之家  ›  专栏  ›  技术社区  ›  Robben_Ford_Fan_boy

在C++中存储类特定的命名常量

  •  2
  • Robben_Ford_Fan_boy  · 技术社区  · 14 年前

    如果您有一个包含一些命名常量的类,那么存储这些常量的最佳实践是什么:

    因此,在我的班级标题中,我将有:

    class myClass
    {
    ...
    ...
    };
    
    namespace NamedConstants
    {
       const string Bucket = "Bucket";
    }
    

    class MyClass {      // this goes in the class
    private:                          // header file
      static const string Bucket;
      ...
    };
    

    ... 在类实现文件中:

    const string MyClass::Bucket = "Bucket";
    

    实际上我更喜欢选项1,因为它更简洁:变量名和值一起出现。另外,如果给名称空间起了一个好名字,那么当您使用常量时,它可以使代码更可读:

    TrafficLight::Green
    

    有人认为这种方法比方案2有什么问题吗?

    2 回复  |  直到 10 年前
        1
  •  3
  •   sbi    14 年前

    如果字符串是要被类的用户看到/使用的,那么您就不会考虑让它们 private 班级成员。因此,我的结论是,它们不应该被类的用户看到/使用。但是把他们放进头球根本没有意义。

    如果将它们放入类中(或将名称空间范围放入头中),则对其类型和标识符的所有更改都将被删除 他们的密码。

    类的实现文件中 ,它们是类的实现的私有细节,对它们的更改只会强制重新编译类的实现。
    如果你把它们放进 ,它们不能与任何其他名称冲突:

    namespace  {
      namespace NamedConstants
      {
         const string Bucket = "Bucket";
      }
    }
    
        2
  •  1
  •   Peter G.    14 年前

    选项1可以为每个包含头的文件生成一个单独的字符串对象。所以这取决于你的资源有多稀缺。