在C ++中,在成员函数中定义静态常量变量有什么好处?

Kyl*_*ish 0 c++

我正在使用一个其构造函数在实现中声明并初始化静态const变量的类。这不是该类的数据成员。我了解在这种情况下使用const,但是使用static有什么好处呢?

我知道该类的所有实例都共享静态const全局常量。构造函数内部的变量也会发生这种情况吗?

另外,为什么不像其他两个那样在Global范围内对此进行定义?那就是我通常定义常量的地方。

示例代码

#includes...

static const int GLOBAL_CONST1 = 100;
static const double GLOBAL_CONST2 = 1.0;

SomeClass::SomeClass()
   :
      theDataMember1        (),
      theDataMember2        (),
      ...
{

   static const double SOME_VAR = 0.01; // Why not declare this globally?
   theDataMember1 = SomeIncludedClass(SOME_VAR);

}
Run Code Online (Sandbox Code Playgroud)

Ban*_*ore 5

无论调用该函数多少次,静态变量都只会构造一次。

因此,如果您在函数内部定义常量并且多次调用该函数,那么为减少每次调用该函数时构造此对象的成本,您可以将其设为静态变量(主要是在使用常量时,否则,最终更改此值,很快就会搞砸了)。

对于第二个问题,这是因为您不希望其他人能够访问变量“ SOME_VAR”的值。提供全球范围意味着任何人都可以访问它。

链接提供了一个很好的示例,说明局部静态有时比全局静态变量有用的情况。

  • static const中的关键字const允许编译器执行其他优化,例如将* variable *视为数字常量并将其直接放入可执行文件的代码段中。或者,编译器可以将变量放入“恒定”存储区(例如Flash或ROM)。 (3认同)