我可以用函数调用的结果初始化一个全局变量吗?

Mat*_*haq 12 c++ variables

以下代码是否合法?

int add(int a, int b)
{
    return a + b;
}

int myvar = add(1, 2);

int main() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

为什么或者为什么不?

Lig*_*ica 19

是.是的.

静态初始化程序可以调用函数,只要它们在范围内.

[dcl.decl] (2003年措辞,8/2):

初始值也可以在声明者中指定 ; 初始化器在8.5和12.6中讨论.

[dcl.init] (2003年措辞,8.5/2):

命名空间作用域的自动,寄存器,静态和外部变量 可以通过涉及文字和 先前声明的变量和 函数的任意表达式初始化.

(不要被缺少static关键字所误导,关键字具有各种含义.您的变量myvar在命名空间范围内声明,因此具有静态存储持续时间.)

  • 如果这样做,请注意订购问题 - 无法保证静态初始化程序在不同的翻译单元中运行的顺序.如果初始化器不使用任何其他全局变量,当然,没有问题. (2认同)