功能是必需的

时间:2013-02-25 10:32:50

标签: c++ c++11

我的问题与具体问题无关.Rather指的是编程风格   在我读过的所有文章和书中都说如果你真的不需要你就不应该使用全局变量。因此,我更喜欢在全局空间中使用#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);
}

其中“replace”是该功能的标识符。该类型的变量必须替换为其值编译时间。

我的问题:
1)人们如何在不使用全局常量的情况下实现漂亮和清晰的代码 2)我如何将这个想法建议到c ++标准(可选)
3)这个想法的缺点在哪里(可选)

3 个答案:

答案 0 :(得分:9)

  

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

只需使用全局常量。宏吮吸。

  

2)我如何将这个想法推荐给c ++标准(可选)

别。已经有一个被拒绝的更好的proposal

  

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

宏吮吸。不要像这样使用它们,那么你就不需要修改标准了。

答案 1 :(得分:6)

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

答案 2 :(得分:0)

  • 全球const远远优于#define#define不受namespace的约束,并且已知会导致模糊的问题(尽管其中大多数是由类似函数的宏引起的)。
  • 关于const的最好的事情是它受名称空间的限制(正如您所提到的)。

我经常使用:

class SomeClass
{
  public:
    const static int STATIC_VALUE = 3;
};
const int SomeClass::STATIC_VALUE;//definition