bio*_*bob 1 c++ static gcc initializer
以下是 C++ 中对象类型的两个类似声明:
struct Obj {
int x;
};
struct ObjC {
int x;
ObjC(int x) : x(x) {};
};
Obj obj1 = {100}
ObjC obj2(200);
Run Code Online (Sandbox Code Playgroud)
使用最新版本的 gcc ( riscv64-unknown-elf-toolchain-10.2.0-2020.12.8) 我发现变量obj1正确地放置在该部分中......但是,.data该变量被放置在未初始化的部分中......obj2.bss
我知道 GCC 有规定在启动时运行构造函数;但在这种情况下,初始状态obj2在编译时是已知的......
FWIW,我的 IAR 编译器对这段代码没有问题......
我需要向 GCC 提供某种“提示”吗???
不标记构造函数constexpr似乎会阻止此处的优化。以下类型似乎已正确初始化,请参阅 godbolt:
struct ObjC2 {
int x;
constexpr ObjC2(int x)
: x(x)
{
}
};
ObjC2 obj3(300);
Run Code Online (Sandbox Code Playgroud)