我只是在想 C/C++ 中的 2 个语句之间是否存在性能差异:
情况1:
if (p==0)
do_this();
else if (p==1)
do_that();
else if (p==2)
do_these():
案例二:
if(p==0)
do_this();
if(p==1)
do_that();
if(p==2)
do_these();
原文由 Syntax_Error 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设简单的类型(在这种情况下,我使用
int
)并且没有有趣的事情(没有为 int 重新定义 operator=),至少对于 AMD64 上的 GCC 4.6,没有区别。生成的代码是相同的:case_1 末尾的额外指令仅用于 填充(使下一个函数对齐) 。
这并不奇怪,确定 p 在该函数中没有改变是相当基本的优化。如果 p 可以更改(例如,通过引用传递或指向各种
do_…
函数的指针,或者是引用或指针本身,因此可能存在别名),那么行为是不同的,并且当然生成的代码也是如此。