Gar*_*ain -5 c++ performance if-statement
假设我想要一个从任何设备接受数字输入的程序,如果该数字为0则返回-1,但在所有其他情况下继续执行该程序.
在C++中,该代码的一部分将是:
int main() {
if(number == 0) return -1;
/*
Here the rest of the program
*/
return 0; // End of program
}
Run Code Online (Sandbox Code Playgroud)
要么
int main() {
if(number == 0) return -1;
else {
/*
Here the rest of the program
*/
}
return 0; // End of program
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这些代码部分中哪一个更有效?
是的,我只是谈论这个确切的情况,当你需要退出程序,如果它满足一定的条件.
由于生成的代码完全相同,因此没有性能差异:
$ echo "int main() { int number; if (number == 0) return -1; return 0; }" | g++ -x c++ -S - -o /dev/stdout | md5sum
9430c430d1f748cc920af36420d160ce -
$ echo "int main() { int number; if (number == 0) return -1; else {} return 0; }" | g++ -x c++ -S - -o /dev/stdout | md5sum
9430c430d1f748cc920af36420d160ce -
$ echo "int main() { int number; if (number == 0) return -1; else {} return 0; }" | g++ -x c++ -S - -o /dev/stdout
.file ""
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
cmpl $0, -4(%rbp)
jne .L2
movl $-1, %eax
jmp .L3
.L2:
movl $0, %eax
.L3:
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4"
.section .note.GNU-stack,"",@progbits
Run Code Online (Sandbox Code Playgroud)