了解静态初始化

时间:2014-06-30 15:38:48

标签: c++ static-initialization

我写了这段代码:

#include <cstdlib> 
#include <iostream>
#include <stdio.h>

constexpr int foo(int a, int b)
{
    return a*b;
}

int bar(int a, int b)
{
    return a*b;
}

int a = bar(1,2); // Dynamic initialization. This brace-or-equal initializer 
                  // contains expression which is not a constant expression
int main()
{ 
    a = foo(3,4); // Constexpr function invocation. Static initialization.
    std::cout << a; // 12
}

此程序输出12。我预计会输出2。因为每个静态初始化都在动态初始化之前执行。我很困惑。

2 个答案:

答案 0 :(得分:3)

作业不是初始化。 foo(3,4)的分配发生在main开始之后(在bar(1,2)初始化之后),并且在打印值之前。

答案 1 :(得分:2)

a未声明为constexpr,因此无法通过constexpr表达式对其进行初始化。在您提供的场景中,第二个“初始化”实际上是动态分配。