与 的语法错误?C++ 中的运算符
Syntax error with ? operator in c++
我正在使用 ? 运算符,我想表达以下内容
(a > b) ? (max = a) : (); // basically i want expression after `:` to be null
如果我在:
后留下空括号,编译器会抱怨语法不正确。将表达式留空后:
正确的语法是什么?
我喜欢在 ? 运算符中简洁
地编写代码
如果我们计算字符,if (a > b) max = a;
更简洁。这是一个可怕的指标。
理想情况下,您的三元运算符不应引起副作用。将副作用隐藏在三元运算符中会使代码更难阅读/调试/维护等。
如果你想要副作用,不要让三元运算符参与进来。
如果要为此使用三元运算符,请考虑max = (a > b) ? a : max
。
三元运算符来了。 它是形式
<condition> ? <r-value1> : <r-value2>
如果条件为真,则返回 r-value1。 否则,它将返回 r 值 2。
因此,做你想做的事的一种方法是:
(a > b) ? (max = a) : 0;
0 是相同类型的 r 值,所以没问题。
但是,请注意,这是一种可怕的代码编写方式。 它的可读性不是很强。
作为学习练习,没关系,但除此之外,正如大家所说,使用
if (a>b) max=a;
这被称为三元运算符,就目前而言,实际上没有一种干净的方法可以将其留空。有一个解决方法,如下所示:
(a > b)?max=a:max=max;
但这真的不是太有效。最简单的方法是如@ta-speot-is所述,并使用缩写的条件语句而不是三元运算符
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 如何防止clang格式在流运算符调用之间添加换行符<<