Понимание статической инициализации

Я написал этот код:

#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

Решение

Назначение не инициализация. Назначение от foo(3,4) происходит после main начинается (что после инициализации из bar(1,2)) и перед печатью значения.

3

Другие решения

a не объявлено constexpr поэтому он не может быть инициализирован через constexpr выражение. В представленном сценарии вторая «инициализация» фактически является динамическим назначением.

2

По вопросам рекламы [email protected]