"Do nothing" 在三元运算符的 else 部分?
"Do nothing" in the else-part of the ternary operator?
要添加到三元运算符以便在不满足条件时不执行任何操作的标准行是什么?
示例:
int a = 0;
a > 10 ? a = 5 : /*do nothing*/;
使用 a
似乎可以解决问题,但我想知道是否有更普遍接受的方法。
那就行了:
a = a > 10 ? 5 : a;
或者简单地说:
if (a > 10) a = 5;
你可以这样做:
a > 10 ? a=5 : 0;
但是,我更愿意:
if (a > 10)
a = 5;
另一个选项:
a ? void(a = 0) : void();
这个的好处在于,即使您无法构造 decltype(a = 0)
的实例以放入 'do nothing' 表达式,它也能正常工作。 (无论如何,这对原始类型来说并不重要。)
如果不想使用 if 语句,也可以使用逻辑表达式(虽然可能会造成混淆)。
a > 10 && a = 5
只是为了多样性,不推荐,因为它很模糊。
void do_smth()
{}
bool a = true; // not necessarily
a && (do_smth(), 0);
要添加到三元运算符以便在不满足条件时不执行任何操作的标准行是什么?
示例:
int a = 0;
a > 10 ? a = 5 : /*do nothing*/;
使用 a
似乎可以解决问题,但我想知道是否有更普遍接受的方法。
那就行了:
a = a > 10 ? 5 : a;
或者简单地说:
if (a > 10) a = 5;
你可以这样做:
a > 10 ? a=5 : 0;
但是,我更愿意:
if (a > 10)
a = 5;
另一个选项:
a ? void(a = 0) : void();
这个的好处在于,即使您无法构造 decltype(a = 0)
的实例以放入 'do nothing' 表达式,它也能正常工作。 (无论如何,这对原始类型来说并不重要。)
如果不想使用 if 语句,也可以使用逻辑表达式(虽然可能会造成混淆)。
a > 10 && a = 5
只是为了多样性,不推荐,因为它很模糊。
void do_smth()
{}
bool a = true; // not necessarily
a && (do_smth(), 0);