表达式 a<=20?b=30:c=30; 怎么写?这样 30 只使用一次?
How to write the expression a<=20?b=30:c=30; such that 30 is used only once?
我正在看一本关于 c 编程的书,遇到了这个例子:
a<=20?b=30:c=30;
我只需要用一次数字 30。书中的解决方案是
((a<=20)?&b:&c)=30);
当我尝试 运行 时,出现以下错误:
lvalue required as left operand of assignment.
好像少了一个括号,但我不知道在哪里。
你能告诉我如何解决这个问题吗?
假设 a 和 b 是同一类型的数字,只需
*((a <= 20) ? &b : &c) = 30;
获取 a 和 b 地址需要取消引用('*')以获得 左值
来自@Vrintle 的注释,你也可以用 C++ 做
((a<=20)?b:c)=30;
编译器知道形式是 lvalue 所以 b 和 c 的值未使用但它们的参考
It seems like one of the parenthesis is missing there, but I don't know where.
在((a<=20)?&b:&c)=30);
最后一个')'没有对应的'('
对于 C 中的初学者,这个表达式
a<=20?b=30:c=30
等同于
( a<=20?b=30:c ) = 30
并且编译器会报错,因为赋值的左操作数不是左值。
你必须写
a <= 20 ? b = 30 : ( c = 30 )
或为了对称
a <= 20 ? ( b = 30 ) : ( c = 30 )
你的意思如下
*(a <= 20 ? &b : &c ) = 30;
在C语言中,通过指向对象的指针间接获取对象引用是一种技巧。指针本身是右值但取消引用它你得到指向对象的左值。
在 C++ 中你可以简单地编写
( a <= 20 ? b : c ) = 30;
因为在这种情况下运算符 returns 左值。
C和C++在条件运算符的语法定义上存在差异。
在 C 中定义为 (6.5.15 条件运算符)
conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
在 C++ 中(C++ 14、5.16 条件运算符)
conditional-expression:
logical-or-expression
logical-or-expression ? expression : assignment-expression
所以在C++中,未经C编译器编译的原始表达式是有效的
a <= 20 ? b = 30 : c = 30
我正在看一本关于 c 编程的书,遇到了这个例子:
a<=20?b=30:c=30;
我只需要用一次数字 30。书中的解决方案是
((a<=20)?&b:&c)=30);
当我尝试 运行 时,出现以下错误:
lvalue required as left operand of assignment.
好像少了一个括号,但我不知道在哪里。
你能告诉我如何解决这个问题吗?
假设 a 和 b 是同一类型的数字,只需
*((a <= 20) ? &b : &c) = 30;
获取 a 和 b 地址需要取消引用('*')以获得 左值
来自@Vrintle 的注释,你也可以用 C++ 做
((a<=20)?b:c)=30;
编译器知道形式是 lvalue 所以 b 和 c 的值未使用但它们的参考
It seems like one of the parenthesis is missing there, but I don't know where.
在((a<=20)?&b:&c)=30);
最后一个')'没有对应的'('
对于 C 中的初学者,这个表达式
a<=20?b=30:c=30
等同于
( a<=20?b=30:c ) = 30
并且编译器会报错,因为赋值的左操作数不是左值。
你必须写
a <= 20 ? b = 30 : ( c = 30 )
或为了对称
a <= 20 ? ( b = 30 ) : ( c = 30 )
你的意思如下
*(a <= 20 ? &b : &c ) = 30;
在C语言中,通过指向对象的指针间接获取对象引用是一种技巧。指针本身是右值但取消引用它你得到指向对象的左值。
在 C++ 中你可以简单地编写
( a <= 20 ? b : c ) = 30;
因为在这种情况下运算符 returns 左值。
C和C++在条件运算符的语法定义上存在差异。
在 C 中定义为 (6.5.15 条件运算符)
conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
在 C++ 中(C++ 14、5.16 条件运算符)
conditional-expression:
logical-or-expression
logical-or-expression ? expression : assignment-expression
所以在C++中,未经C编译器编译的原始表达式是有效的
a <= 20 ? b = 30 : c = 30