C++ 常量在函数中的位置

C++ 常量在函数中的位置,c++,constants,C++,Constants,之前也有人问过类似的问题,但没有一个答案真正提供了我想要的 我很难决定常量在函数中的位置。我知道很多人把它们放在最上面,但是如果你把它们放在尽可能靠近使用它们的地方,你会减少代码跨度。即 void f() { const FOO = 3; ...// some code if ( bar > FOO ) { ...// do stuff } } 或 我倾向于在小函数中使用顶部常量,在大函数中尽可能保持跨度,但我想知道其他人对此有什么看法。你的方法听起来不错 有时我

之前也有人问过类似的问题,但没有一个答案真正提供了我想要的

我很难决定常量在函数中的位置。我知道很多人把它们放在最上面,但是如果你把它们放在尽可能靠近使用它们的地方,你会减少代码跨度。即

void f() {
  const FOO = 3;
  ...// some code
  if ( bar > FOO ) {
    ...// do stuff
  }
}


我倾向于在小函数中使用顶部常量,在大函数中尽可能保持跨度,但我想知道其他人对此有什么看法。

你的方法听起来不错


有时我甚至会将这些神奇的数字放在文件的顶部,以确保任何“设置”或可调整项对其他人都是高度可见的

在可能的最低范围内,并在首次使用之前


就风格而言,为了清晰/易懂,可以做出例外,例如,对概念上相似的常数进行分组。

这取决于您真正想要做什么。我通常把它们放在离实际使用位置很近的地方


当它们被分组时,我将它们放在顶部,为了理解其中一个,你必须查看其他的(例如,当一个常数依赖于另一个常数时)。

很多时候,常量值被放在文件的顶部,以便进行开发的个人很容易识别(和“查找”)。但是,如果您只需要一小段代码的常量值,最好按照您的建议将其范围限定在需要的地方。

特别是如果您要编写具有所有起始值(包括常量值)的较长算法在读取算法本身时,在函数顶部声明的变量更清晰。

我建议将它们放在名称空间或类下的头文件中

在C99之前版本的C中,只能在块的开头定义变量。因此,第二种选择是无效的C代码。我相信代码完全有助于将声明尽可能地靠近第一次使用,但是有些人会反对这个规则,理由是它使得C和C++之间的东西不一致。p>

现在,标准C和C++允许你把声明移到第一个用法,这个异议不再成立。 有时,有令人信服的理由表明,对于非常量变量,尽可能晚地声明比在顶部声明更好。例如,没有初始化的声明可能会意外读取未初始化的变量。此外,在C++中,在函数的顶部声明类变量,而不进行初始化,调用默认构造函数。当它以后被赋值时,它调用赋值操作符。如果改为在初始化时声明变量,则调用复制构造函数。默认构造函数+赋值的成本通常会大于复制构造函数的成本

显然,最后一个参数只能应用于非常量变量,因为常量变量上没有赋值。但是,为什么您需要在不同的位置查找const声明呢?如果常数int n=3;显然是常量,那么常量char*s=“FOO”呢;?那个常数是否足以归属于顶端?或者它必须是const char*const s=“FOO”;?另外,如果您还不知道要将常量变量初始化为顶部的哪个值,那么您必须推迟声明常量变量,直到您知道它需要初始化为什么

void f() {
  ...// some code
  const FOO = 3;
  if ( bar > FOO ) {
    ...// do stuff
  }
}