在C ++中命名常量

时间:2014-11-04 14:24:29

标签: c++ const naming-conventions naming

我正在替换我的#defines,例如#define NUM_SLIDER_POSITIONS 5替换常量变量。我应该保留旧的命名,如:

const unsigned int NUM_SLIDER_POSITIONS = 5;

或者我应该使用更像的东西:

const unsigned int kNumSliderPositions = 5;

编辑:帖子已被暂停,但无论如何我想总结一下你的答案:

其他选项是使用下划线作为使用小写字母的分隔符:

const unsigned int num_slider_positions = 5;

常量标识符。

关于使用前缀作为识别常量的方法,最常见的选项是不使用它,因为它可能不会添加相关信息:

const unsigned int num_slider_positions = 5;

使用" k"在名字之前:

const unsigned int k_num_slider_positions = 5;

或者在类或命名空间中声明变量,以避免污染全局范围并提供更加不言自明的名称:

namespace defaults // or "config", or "settings" or something like that
{
    const unsigned int num_slider_positions = 5;
}

客户代码:

int slider_positions = defaults::num_slider_positions;

3 个答案:

答案 0 :(得分:5)

  

我正在替换常量变量的#defines。

奖励! :)

  

我应该保留旧的命名,如:[all-caps]

如果项目的编码约定将常量指定为全部大写,那么您应该(因为它可以省力)。 否则,你不应该(因为以后会因为维护而混淆)。

  

或者我应该使用更像的东西:[bastardized hungarian convention]

这取决于你。我个人不喜欢为我的常量添加奇怪的字母,因为在阅读代码时 - 或者编写代码 - 我并不关心它们是不变的(如果我尝试写入它们,编译器会让我知道)。

我的(个人)选择是使用命名空间来提供上下文(而不是前缀),沿着以下几行:

namespace defaults // or "config", or "settings" or something like that
{
    const unsigned int num_slider_positions = 5;
}

客户代码:

int slider_positions = defaults::num_slider_positions;

我发现这是一个更好的选择,因为上下文更加不言自明(比它前面的"#"或者" g"或者其他什么)。

答案 1 :(得分:1)

这取决于你的任何名称约定。但是对于C ++代码,您也可以考虑将常量放在使用它的类中,而不是污染全局范围。

答案 2 :(得分:0)

使用C ++的常量名称的命名约定是使用 k ,然后是混合大小写,  对于全局或类中定义的常量,为了方便读者,全局或类作用域的编译时常量遵循与其他变量不同的命名约定。使用k后跟带有大写第一个字母的单词

const unsigned int kNumSliderPositions = 5;

see more