我正在尝试为给定的用例为我的类定义一个常量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];
};
Run Code Online (Sandbox Code Playgroud)
我刚刚列出了可以为类定义常量的不同方法.
1. Using Preprocessor constant
2. Using Global constant
3. Using in-class constant
4. using an enum.
Run Code Online (Sandbox Code Playgroud)
其中,哪个是定义给定用例的常量的最佳方法?我更喜欢使用枚举常量而非其他方法.有没有其他更好的方法,我错过了.
谢谢,
xto*_*ofl 10
枚举类型并不意味着定义数字常量,尽管它(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; }
};
Run Code Online (Sandbox Code Playgroud)
第二种选择的优点是,当您想要例如从注册表或配置文件中读取常量时,您不需要稍后更改任何客户端代码.
为了维护目的,最好尽可能地限制任何名称的范围(无论是函数,变量还是常量).所以我建议
static const int BUFFER_LENGTH = 12;
Run Code Online (Sandbox Code Playgroud)
要么
enum { BUFFER_LENGTH = 12 };
Run Code Online (Sandbox Code Playgroud)
在类定义中.
前者没有太大的好处,除了你可以明确控制类型. enum导致C++为你选择一个未指定的整数"底层类型" - 它可能就像char你的枚举只包含很小的值一样小,但根据经验,大多数编译器默认使用一个int.