我想要一个不做任何事情的声明,但可以在需要声明的地方使用。通过: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
解决了我的问题。谢谢!
答案 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)
一种方法可能是:
<小时/>
答案 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)。
f
和g
都给出
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
或更高版本的标志时,同样适用-f
和g
成为
ret
和h
变为
nop
ret
使用循环时,例如for(;;){}
,__asm__
仍然增加了一条额外的指令,这是可以理解的