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

Is there an equivalent of Python's `pass` in c++ std11?

本文关键字:通行证 Python 相当于 std11 c++ 是否      更新时间:2023-10-16

我想要一个什么都不做但可以在需要语句的地方使用的语句。通行证:http://docs.python.org/release/2.5.2/ref/pass.html

编辑:刚刚看到:如何在C/C++中执行无操作?

#define pass (void)0

解决了我的问题。谢谢!

空语句(只是分号(或空括号应该适合您

例如 Python 的

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

可以翻译成以下C++

while (/* some condition */)
    ;

while (/* some condition */) {}

也许对于三元运算符的情况,您可以执行以下操作:

x > y ? do_something() : true;

No.您没有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在类似的上下文中做类似的事情。

希望有帮助。

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

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

在这方面,如果Python支持你说它支持的东西,那么它将在C++不支持的地方被破坏。碰巧的是,Python实际上也不支持它,毕竟。

改为编写if语句:

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

这太荒谬了,但你可能会想到使用"nop"指令。

在 Linux 中

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

在窗口中

void pass()
{
    __asm{nop};
}

我认为C++只是一个空行(;)将相当于"通行证">

正如@bboonn所建议的:

 if (some_flag)
   ; // Do nothing
 else if (some_other_flag)
   do_something();
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__还是多加了一条指令,这是可以理解