我正在尝试为给定的用例为我的类定义一个常量BUFFER_LENGTH.
//1. Using preprocessor declaration //#define BUFFER_LENGTH 12 //2.Global constant //const int BUFFER_LENGTH = 12; class MyRequest { public: //3. Define an in-class constant //static const int BUFFER_LENGTH = 12; //4. Declare an enum constant enum { BUFFER_LENGTH = 12 }; MyRequest() { strcpy(mBuffer, "TestString"); printf("Buffer: %s, BUFFER_LENGTH = %d",mBuffer, BUFFER_LENGTH); } private: char mBuffer[BUFFER_LENGTH]; };
我刚刚列出了可以为类定义常量的不同方法.
1. Using Preprocessor constant 2. Using Global constant 3. Using in-class constant 4. using an enum.
其中,哪个是定义给定用例的常量的最佳方法?我更喜欢使用枚举常量而非其他方法.有没有其他更好的方法,我错过了.
谢谢,
枚举类型并不意味着定义数字常量,尽管它(ab)在模板元编程中使用了很多.
如果常量的含义与类纠缠在一起,我会在那里定义它.那你还有两个选择:
class WithConst { public: // 1. as a const static member variable static const int sc_nNumber = 100; // I can initialize here for // integral-types only // 2. as a static member function - possibly inlined. static int sf_nNumber() { return 100; } };
第二种选择的优点是,当您想要例如从注册表或配置文件中读取常量时,您不需要稍后更改任何客户端代码.
为了维护目的,最好尽可能地限制任何名称的范围(无论是函数,变量还是常量).所以我建议
static const int BUFFER_LENGTH = 12;
要么
enum { BUFFER_LENGTH = 12 };
在类定义中.
前者没有太大的好处,除了你可以明确控制类型. enum
导致C++为你选择一个未指定的整数"底层类型" - 它可能就像char
你的枚举只包含很小的值一样小,但根据经验,大多数编译器默认使用一个int
.