gpt4 book ai didi

c++ - 有-O2 和没有-O2 的成员变量的不同行为

转载 作者:太空宇宙 更新时间:2023-11-04 13:54:48 24 4
gpt4 key购买 nike

对于 -O2,有人告诉我 A 的值将始终为零,因为 gcc 会将 B 和 C 初始化为零?为什么?然而,正如预期的那样,如果没有 -O2,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;
}

最佳答案

编写包含这种初始化相互依赖关系的初始化列表不是好的做法,因为这需要特定的数据成员声明顺序。在这种情况下,考虑这样写:

 ClassX() : C_(1), B_(2) { A_ = B_ + C_; }

此外,并非所有编译器都保证数据成员的零初始化。在进程加载期间,您的数据所在的页面可能会发生零填充,但同样,这不能保证并且是特定于操作系统的。对于调试版本,您的内存很可能会充满非零值。

关于c++ - 有-O2 和没有-O2 的成员变量的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21982361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com