C++ 是否执行以下C/C++;代码调用未定义的行为?
我的一个朋友告诉我,这引发了未定义的行为,我感觉正好相反。有人能帮我吗?如果要写这样的运算符C++ 是否执行以下C/C++;代码调用未定义的行为?,c++,c,variable-assignment,ternary-operator,undefined-behavior,C++,C,Variable Assignment,Ternary Operator,Undefined Behavior,我的一个朋友告诉我,这引发了未定义的行为,我感觉正好相反。有人能帮我吗?如果要写这样的运算符 int a = 2, b = 3, c = 4, d = 5; a > 1 ? b : c = d; (因为这样在C中被解析),那么它在C++中是有效的,但不会在C中编译,因为在C中,操作符返回rVal.< /P> 如果删除括号,则在C++中,它将等同于 ( a > 1 ? b : c ) = d; a > 1 ? b : c = d; P>操作符在C和C++中的行为不同。在C
int a = 2, b = 3, c = 4, d = 5;
a > 1 ? b : c = d;
(因为这样在C中被解析),那么它在C++中是有效的,但不会在C中编译,因为在C中,操作符返回rVal.< /P>
如果删除括号,则在C++中,它将等同于
( a > 1 ? b : c ) = d;
a > 1 ? b : c = d;
<> P>操作符在C和C++中的行为不同。在C记录中
a > 1 ? b : ( c = d );
相当于
( a > 1 ? b : c ) = d;
a > 1 ? b : c = d;
不会被编译
C++记录
( a > 1 ? b : c ) = d;
它相当于tp
a > 1 ? b : c = d;
并将进行汇编
<>此外,如果以C++的方式重写它,与在c中解析的方式相同
a > 1 ? b : ( c = d );
再次编译它,因为C++中的操作符返回LValue/< 下面是C中运算符的定义
( a > 1 ? b : c ) = d;
这是C中运算符的定义++
conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
正如您所看到的,除了语义差异之外,运算符的语法相对于第三个表达式也存在差异。此代码不会调用未定义的行为,但会在C中产生一些错误,如
a>1?b:c=d代码>将被评估为
conditional-expression:
logical-or-expression
logical-or-expression ? expression : assignment-expression
a>1?b:c
将导致一个不能作为赋值运算符左操作数的右值=
在我看来很好。为什么他认为它会给出未定义的行为?选择一种语言。C/C++不是一种语言,因为它在C和C++中可能会有不同的行为,所以我很高兴听到两种语言之间的细节/差异。区别在于C!=C++。不进行比较。使用术语“C/C++”调用未定义的答案。注意:上述错误仅适用于(代码有效)。