Когда следующий код скомпилирован с оптимизацией:
struct A {
int a_;
A(int a) : a_(a) {}
};
struct B {
int a_;
constexpr B(int a) : a_(a) {}
};
A a{1};
B b{1};
gcc
генерирует код, который вызывает конструктор A
для глобальной переменной a
, поскольку конструктор A
не является constexpr
. Принимая во внимание, что нет никакого вызова к конструктору B
для инициализации переменной b
.
clang
, однако в обоих случаях исключает вызов к конструктору.
Сгенерированный код .