在C++中命名常量

ken*_*er6 6 c++ naming const naming-conventions

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

const unsigned int NUM_SLIDER_POSITIONS = 5;
Run Code Online (Sandbox Code Playgroud)

或者我应该使用更像:

const unsigned int kNumSliderPositions = 5;
Run Code Online (Sandbox Code Playgroud)

.

编辑:帖子已被搁置,但无论如何我想总结你的答案:

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

const unsigned int num_slider_positions = 5;
Run Code Online (Sandbox Code Playgroud)

常量标识符.

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

const unsigned int num_slider_positions = 5;
Run Code Online (Sandbox Code Playgroud)

在名称前使用"k":

const unsigned int k_num_slider_positions = 5;
Run Code Online (Sandbox Code Playgroud)

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

namespace defaults // or "config", or "settings" or something like that
{
    const unsigned int num_slider_positions = 5;
}
Run Code Online (Sandbox Code Playgroud)

客户代码:

int slider_positions = defaults::num_slider_positions;
Run Code Online (Sandbox Code Playgroud)

utn*_*tim 11

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

奖励!:)

我应该像以下一样保留旧的命名:[all-caps]

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

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

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

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

namespace defaults // or "config", or "settings" or something like that
{
    const unsigned int num_slider_positions = 5;
}
Run Code Online (Sandbox Code Playgroud)

客户代码:

int slider_positions = defaults::num_slider_positions;
Run Code Online (Sandbox Code Playgroud)

我发现这是一个更好的选择,因为上下文更加不言自明(比它前面的"k",或"g"或其他任何东西).

  • 使用命名空间可能是个好主意,谢谢。 (3认同)
  • “命名空间是一个很棒的想法——让我们做更多这样的事情!” - 蒂姆·彼得斯 (3认同)