2

我的问题与特定问题无关。而是指编程风格。
在我读过的所有文章和书籍中都说如果你真的不需要,就不应该使用全局变量。因此,我更喜欢在全局空间中使用#define而不是const变量类型。但是#defines有一个可怕的缺陷不能放在命名空间中。

我经常希望 c++ 具有允许此类行为的功能,例如命名空间中的#define。

例子:

namespace Space
{
replace type variable = constructor(args);
replace type2 variable2(args);
}

void function(type variable);

int main()
{
    function(Space::variable);
}

其中“替换”是该功能的标识符。并且这种类型的变量必须用他的值编译时间替换。

我的问题:
1)人们如何在不使用全局常量的情况下实现美观清晰的代码
2)我如何向 c++ 标准提出这个想法(可选)
3)这个想法的缺点在哪里(可选)

4

3 回答 3

9

1)人们如何在不使用全局常量的情况下实现美观清晰的代码

只需使用全局常量。宏很烂。

2)我如何向 C++ 标准提出这个想法(可选)

不。已经有一个更好的提议被拒绝了。

3)想法的缺点在哪里(可选)

宏很烂。不要像这样使用它们,那么您就不需要更改标准。

于 2013-02-25T10:37:36.113 回答
6

您将针对全局共享状态的一般规则误认为针对全局变量的规则。由于常量是不可变的,它们不构成状态,并且使用起来非常安全。相反,规则应该是所有全局变量都应该是const.

于 2013-02-25T10:56:26.793 回答
0
  • 全球const#define. #define不受监管namespace并且已知会导致晦涩的问题(尽管其中大多数是由类似函数的宏引起的)。
  • 最好的事情const它受命名空间的约束(正如你提到的)。

我经常使用:

class SomeClass
{
  public:
    const static int STATIC_VALUE = 3;
};
const int SomeClass::STATIC_VALUE;//definition
于 2013-02-25T10:36:02.753 回答