Xir*_*dus 69 c++ performance conditional-operator
在C++中,?:运算符比if()... else语句更快?它们在编译代码中有什么区别吗?
Kir*_*sky 93
它并不快.根据某个表达式初始化常量变量有一个区别:
const int x = (a<b) ? b : a;
Run Code Online (Sandbox Code Playgroud)
你不能这样做if-else.
pto*_*ato 84
取决于您的编译器,但在任何现代编译器上通常没有区别.这是你不应该担心的事情.专注于代码的可维护性.
jal*_*alf 40
我已经看到GCC将条件运算符转换为cmov(条件移动)指令,同时将if语句转换为分支,这意味着在我们的情况下,使用条件运算符时代码更快.但那是在几年前,而且很可能在今天,两者都会编译成相同的代码.
无法保证他们将编译为相同的代码.如果您需要性能,那么一如既往地进行测量.当你测量并发现1.你的代码太慢,并且2.这是特定的代码块是罪魁祸首,然后研究编译器生成的汇编代码并自己检查发生了什么.
不要相信黄金规则,"如果我使用条件运算符,编译器将始终生成更高效的代码".
Jam*_*ran 15
它们是相同的,但是,三元运算符可以在难以使用if/else的地方使用:
printf("Total: %d item%s", cnt, cnt != 1 ? "s" : "");
Run Code Online (Sandbox Code Playgroud)
使用if/else执行该语句将生成非常不同的编译代码.
8年后更新......
实际上,我认为这会更好:
printf(cnt == 1 ? "Total: %d item" : "Total: %d items", cnt);
Run Code Online (Sandbox Code Playgroud)
(实际上,我很确定你可以用"one"替换第一个字符串中的"%d")
| 归档时间: |
|
| 查看次数: |
93859 次 |
| 最近记录: |