【发布时间】:2014-02-24 08:21:41
【问题描述】:
使用 -O2,有人告诉我 A 的值将始终为零,因为 gcc 会将 B 和 C 初始化为零?为什么?但是,正如预期的那样,如果没有 -O2,由于 init 顺序不正确,A 的值将是未定义的。
#include <iostream>
class ClassX
{
public:
ClassX() : C_(1), B_(2), A_(B_ + C_) {};
void print() {std::cout << A_ << std::endl;}
private:
int A_;
int B_;
int C_;
};
int main(int argc, const char *argv[])
{
ClassX x;
x.print();
return 0;
}
【问题讨论】:
-
您应该要求某人为您提供 GCC 文档中的参考资料。
-
初始化顺序是它们被声明的顺序。所以 A 首先被初始化。所以你的代码有未定义的行为。
-
即使那是真的,那也是不可操作的。你仍然会因为编写这样的代码而被解雇。
-
希望有人用
-Wall编译。
标签: c++ gcc optimization