C++中引用自初始化是否为未定义行为及赋值后行为探讨
关于引用自初始化的C++未定义行为问题
我了解到对未初始化变量进行求值属于未定义行为(Undefined Behavior,UB),例如int i = i;就是典型的未定义行为案例。但我有个疑问:使用引用变量对自身进行初始化是否也属于未定义行为?具体而言,根据C++标准,int &ref = ref;这种写法属于UB吗?它是良构代码、非法代码,还是会触发未定义行为?
int &ref = ref; // 这段代码是良构、非法还是未定义行为?
我测试发现所有编译器都能编译上述代码(Clang会给出警告),想知道这是因为它属于未定义行为因此允许编译器做出任意处理,还是该程序本身就是良构的?
此外,如果为ref赋值,程序行为是否会与之前的情况有所不同?
int &ref = ref; int main() { ref = 1; // 这会改变程序的行为吗? }
我实际测试发现第二个代码片段会触发段错误。
内容的提问来源于stack exchange,提问作者user20562802
相关产品推荐
相关产品推荐

