【发布时间】:2020-08-21 10:00:05
【问题描述】:
我想让我的代码更简洁,所以我写了这个:
while(m <= r)
nums[m] ? nums[m] == 1 ? m++ : swap(nums[m], nums[r--]) : swap(nums[m++], nums[l++]);
但它不起作用,因为 'swap' 是一个 void 函数,但 'm++' 返回 int。 (“? 的右操作数为 void,但左操作数的类型为 int”错误)。所以我想知道如何替换 m++ 使其为 void 类型。
我知道我可以创建一个新的 void 函数(例如 void increase(int &x){x++;}),但我想将我的代码保留为单行。
我制作的最佳工作变体是“swap(nums[m], nums[m++])”,它对我的数组没有任何作用,但它看起来很糟糕。我还可以使用哪些其他功能?
【问题讨论】:
-
对
(void)的简单转换可以解决您的问题:demo on coliru。不过整个表情看起来有点吓人…… -
.... arrr ...简洁并不总是意味着更好。总是更喜欢可读性。这段代码将无法通过任何体面的代码审查,即使它可以编译。
-
@Scheff:我认为在
swap之后使用operator ,也返回int会更吓人;) -
你担心错了。这段代码绝对不可读,更糟糕的是,无法维护。它应该用
if语句重写。 -
这完全是对三元运算符的滥用。这并不是要替换
if语句,而是要在两个值之间进行选择。
标签: c++