当前位置:  开发笔记 > 编程语言 > 正文

在类中定义常量(用于常量表达式)的最佳方法?

如何解决《在类中定义常量(用于常量表达式)的最佳方法?》经验,为你挑选了2个好方法。

我正在尝试为给定的用例为我的类定义一个常量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.

其中,哪个是定义给定用例的常量的最佳方法?我更喜欢使用枚举常量而非其他方法.有没有其他更好的方法,我错过了.

谢谢,



1> xtofl..:

枚举类型并不意味着定义数字常量,尽管它(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; }
 };

第二种选择的优点是,当您想要例如从注册表或配置文件中读取常量时,您不需要稍后更改任何客户端代码.



2> j_random_hac..:

为了维护目的,最好尽可能地限制任何名称的范围(无论是函数,变量还是常量).所以我建议

static const int BUFFER_LENGTH = 12;

要么

enum { BUFFER_LENGTH = 12 };

类定义中.

前者没有太大的好处,除了你可以明确控制类型. enum导致C++为你选择一个未指定的整数"底层类型" - 它可能就像char你的枚举只包含很小的值一样小,但根据经验,大多数编译器默认使用一个int.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有