【问题标题】:May I initialize a global variable with the result of a function call?我可以用函数调用的结果初始化一个全局变量吗?
【发布时间】:2011-06-13 23:05:50
【问题描述】:

下面的代码合法吗?

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

int myvar = add(1, 2);

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

为什么,或者为什么不?

【问题讨论】:

    标签: c++ variables


    【解决方案1】:

    Yes. Yes, it is.

    静态初始化器可以调用函数,只要它们在作用域内。

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

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

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

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

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

    【讨论】:

    • 如果您这样做,请注意排序问题 - 无法保证静态初始化程序在不同翻译单元中的运行顺序。如果初始化器不使用任何其他全局变量,当然没有问题。
    猜你喜欢
    • 2021-11-18
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多