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

Jub*_*uba 5 c++

对于以下内容:

( a != b ) ? cout<<"not equal" : cout<<"equal";
Run Code Online (Sandbox Code Playgroud)

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

Vin*_*vic 21

如果它确实适用于不需要第二个操作的三元运算符,那么最好的选择是将其替换为if:

if (a!=b) cout << "not equal";
Run Code Online (Sandbox Code Playgroud)

它的味道会少很多.

  • 所以?这个想法正是从一开始就避免做那种丑陋的表达。 (2认同)

alt*_*uic 11

简单:我会将其编码为

if (a != b)
   cout << "not equal";
Run Code Online (Sandbox Code Playgroud)

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

(a != b) ? cout << "not equal" : cout;
Run Code Online (Sandbox Code Playgroud)

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


小智 8

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

所以在你的例子中,使用( a != b ) ? (void)0 : cout<<"equal";


Soa*_*Box 5

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

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


Ric*_*den 5

以下将实现您正在寻找的内容,但是,阅读您的代码的人可能不清楚它为什么起作用:

(a != b) && (cout << "equal");
Run Code Online (Sandbox Code Playgroud)

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

  • @ ya23,您能否更准确地了解他所依赖的优化?该表达式在所有优化上下文中都有明确定义。 (3认同)