在c ++ std11中是否有相当于Python的“pass”?

时间:2013-12-04 17:45:19

标签: c++ python

我想要一个不做任何事情的声明,但可以在需要声明的地方使用。通过:http://docs.python.org/release/2.5.2/ref/pass.html

编辑:刚看到:How does one execute a no-op in C/C++?

#define pass (void)0

解决了我的问题。谢谢!

8 个答案:

答案 0 :(得分:25)

分号或空括号应该适合你

例如Python的

while some_condition():    # presumably one that eventually turns false
    pass

可以翻译成以下C ++

while (/* some condition */)
    ;

或者

while (/* some condition */) {}

也许对于三元运算符案例,您可以这样做:

x > y ? do_something() : true;

答案 1 :(得分:7)

没有。您没有pass或等效的关键字。但是你可以编写没有任何关键字的等效代码。

def f():
   pass

变为

void f() {}

 class C:
     pass

变为

 class C {};

在不同的上下文中,不同的语法可能有用。例如,

 class MyError(Exception):
        pass

变为

class MyError : public std::exception
{
      using std::exception::exception; //inherits constructor!
};

正如您所看到的,在此上下文中,您要编写using以从基类继承构造函数。在Python中,pass在类似的上下文中执行类似的操作。

希望有所帮助。

答案 2 :(得分:4)

正如评论中所述,不支持,因为它没有任何意义。条件运算符旨在评估两个操作数之一。二。不是一个。

滥用操作员仅在其中一种情况下执行某些条件操作是不可取的。事实上,最好是两个操作数都没有任何副作用。这不是“做某事”的构造,而是“给我两件事之一”构建。

在这方面,如果Python支持你所支持的内容,那么它将是已破解,而C ++则不然。事实上,Python毕竟不支持它。

写一个if语句,而不是:

if (x > y) {
   do_something();
}
else {
   /* Unimplemented at the moment */
}

答案 3 :(得分:3)

我认为在C ++中只是一个空行(;)将等同于'pass'

答案 4 :(得分:2)

我知道这太荒谬了,但您可能会考虑使用“ nop”指令。

在Linux中

void pass()
{
    __asm__("nop");
}

在Windows中

void pass()
{
    __asm{nop};
}

答案 5 :(得分:0)

一种方法可能是:

<小时/>
功能:制作&#34; proto&#34;函数返回void并使用&#39;;&#39;如上所述
循环:当然使用break
其他任何事情:根据我的经验,我会留下一个功能或代码段注释掉。有时我还会添加一个小的表示摘要以供将来编辑。
你接近这个的方式应该是关于什么是舒适的。只需做你想要的逻辑上的工作。

答案 6 :(得分:0)

如@bboonn所建议的:

 if (some_flag)
   ; // Do nothing

 else if (some_other_flag)
   do_something();

答案 7 :(得分:0)

void f() { ; }
void g() { }
void h() { __asm__("nop"); }

所有结果都几乎是相同的汇编输出(x86 64)。

fg都给出

push    rbp
mov     rbp, rsp
nop
pop     rbp
ret

g给出

push    rbp
mov     rbp, rsp
nop
nop
pop     rbp
ret

(另外一个nop

在我的测试中,似乎仅包含__asm__("nop")的循环比;花费〜50%的时间

使用-O1或更高版本的标志时,同样适用-fg成为

ret

h变为

nop
ret

使用循环时,例如for(;;){}__asm__仍然增加了一条额外的指令,这是可以理解的