You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++类成员默认初始化相互依赖是否属于未定义行为?

C++类成员互相初始化是否属于未定义行为?

先看这个C++类的定义:

class Foo {
public:
    int a = b; 
    int b = a; 
};

简言之,这段代码是否属于未定义行为(undefined behaviour)?

提问者认为这是未定义行为,原因是初始化a时使用了尚未完成初始化的b的值。但实际测试中,用x86-64 GCC 12.2编译器,加上-std=c++20 -Wall -Wextra -Wpedantic -Werror参数编译以下完整程序时,编译器没有报错,程序还输出了预期结果:

#include <iostream>

class Foo {
public:
    int a = b; 
    int b = a; 
};

int main() 
{
    Foo bar{.a = 42}; 
    std::cout << bar.a << ' ' << bar.b;
}

请问该代码是行为定义良好,还是属于未定义行为但编译器未检测出问题?


内容的提问来源于stack exchange,提问作者justANewb stands with Ukraine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:45:29