static const data member vs函数中的硬编码值

时间:2010-09-28 20:33:10

标签: c++

我有一个带有数据属性的类,比如类型int,它在整个程序运行期间应该是常量,并且在所有类实例中具有相同的值。我希望通过名为get_value()的公共成员函数访问此值。显而易见的方法是定义私有static const类成员并让get_value返回它。

或者,我可以将值放在get_value本身的定义中:例如,int get_value()const{return 5;}。第一种方法明显优于第二种吗?

4 个答案:

答案 0 :(得分:2)

从计算的角度来看,编译代码的期限应该没有太大差异。

但是使用第一种方法你不会在你的函数中隐藏变量:如果你没有1而是10这些变量我希望看到它们在你的类的开头定义,而不是在一些getter函数中10行以下

我认为它更清洁,我知道通过查看你的课程是什么“神奇的价值观”,我不需要完成你的职能。

答案 1 :(得分:2)

想想一个维护程序员,从现在起一年后查看你的代码并思考:为什么五个?五是什么意思?当我们星期六工作时,也许真的是六岁?

比较他的任务,如果他看到了这个:

   int const MY_BEST_GUESS_AT_LOW_WATERMARK = 5;
   return MY_BEST_GUESS_AT_LOW_WATERMARK;

答案 2 :(得分:1)

我认为这只是风格问题,因为编译会在大多数情况下优化const。

答案 3 :(得分:0)

为什么不直接将静态常量声明为公共?

#include <iostream>
using namespace std;

class Foo {
public:
  static const int VALUE = 5;
};

int main() {
  cout << Foo::VALUE << endl;
  return 0;
}

当然,你可以添加一个公共成员get_value,但我不知道会给你什么。我不认为这打破了封装,因为VALUE是常量:我会以这种方式公开静态或成员变量但它似乎合理一个常量,并且在C ++标准库中有一些先例。