如何在C / C ++中执行no-op?

时间:2008-11-18 21:35:33

标签: c++

以下内容:

( a != b ) ? cout<<"not equal" : cout<<"equal";

假设我不在乎它是否相等,我怎么能用cout<<"equal"代替no-op来使用上述陈述。

12 个答案:

答案 0 :(得分:20)

如果真的是三元运算符不需要第二个动作,最好的选择是将它替换为if:

if (a!=b) cout << "not equal";
它的味道会少很多。

答案 1 :(得分:11)

简单:我会将其编码为

if (a != b)
   cout << "not equal";

三元运算符要求两个结果属于同一类型。所以你也可以逃脱

(a != b) ? cout << "not equal" : cout;

因为流运算符(&lt;&lt;)只返回ostream引用。在我看来,这是丑陋和不必要的。

答案 2 :(得分:4)

其他答案中唯一缺少的是: 直接在C / C ++中编写“noop”是没有办法的。

另外,执行:(a != b) ? : printf("equal\n");确实为我编译(gcc 4.2.4中的gcc -ansi)。

答案 3 :(得分:4)

以下内容将实现您的目标,但是,阅读代码的人可能并不清楚为什么有效:

(a != b) && (cout << "equal");

就个人而言,我同意Vinko Vrsalovic的this回答。

答案 4 :(得分:3)

(void)0;是noop。使用expr?false:true形式有很多充分的理由。看看assert()是如何实现的。

因此,在您的示例中,请使用( a != b ) ? (void)0 : cout<<"equal";

答案 5 :(得分:1)

这是非常令人困惑的代码。你可以只写

cond ? cout << "equal" : cout;

但是你不会(不是吗?),因为你已经有了传统的if

答案 6 :(得分:1)

我认为这里的问题是运算符:有两个EXPRESSIONS作为参数。 我们说.. a = x? y:z;

按定义表达式必须有一个值...这就是为什么你不能只是“跳过”。

答案 7 :(得分:1)

如果代码的焦点是输出操作而不是条件,那么可以这样做:

cout << (cond ? "not equal" : "");

我怀疑情况并非如此,因为你想在“else”条款中什么也不做。

答案 8 :(得分:1)

在C ++ 11中,您可以编写(如果无效):

somecondition ? foo() : [] {} () ;

所以NOP实际上是一个空的lambda。 除了void,你可以返回任何类型和价值。

这可能看起来有点矫枉过正,但假设你有这个:

somecondition1 ? foo1() :
somecondition2 ? foo2() :
somecondition3 ? foo3() :
                 flip_out_because_unhandled_condition() ;

现在,如果有人添加了somecondition4,但忘记将其包含在处理代码中,软件将调用flip_out _...函数,从而导致各种不必要的影响。 但也许somecondition4不需要特别注意,只需要忽略它。 那么你可以写:

somecondition1 ? foo1()   :
somecondition2 ? foo2()   :
somecondition3 ? foo3()   :
somecondition4 ? []{}() :
                 flip_out_because_unhandled_condition() ;

答案 9 :(得分:0)

if (a!=b) cout<<"not equal";

答案 10 :(得分:0)

语法只需要一个表达式。你可以去: (a!= b)?cout&lt;&lt;“not equal”:1;

答案 11 :(得分:0)

两个语句都编译:

( a != b ) ? cout<<"not equal" : NULL;

( a != b ) ? NULL : cout<<"equal";