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

时间:2011-06-13 23:05:51

标签: c++ variables

以下代码是否合法?

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

int myvar = add(1, 2);

int main() { /* ... */ }

为什么,为什么不呢?

1 个答案:

答案 0 :(得分:19)

Yes. Yes, it is.

静态初始值设定项可以调用函数,只要它们在范围内。

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

  

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

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

  

自动,注册,静态,以及   命名空间范围的外部变量   可以任意初始化   表达式涉及文字和   以前声明的变量和   的功能

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