編輯:我錯了,編譯工程,並使用浮點數時預期。
那麼海灣合作委員會4.6.3在-03
肯定似乎做到這一點,只要表達式是整數相關。
示例代碼:
#include <cstdio>
inline int x(double y)
{
if (y == 0)
printf("Hello bob3\n");
else
printf("Why do I bother\n");
};
const int c = 0;
int main()
{
int f;
scanf("%d",&f);
x(f * c);
}
得到的組件
.file "foo.cpp"
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "%d"
.LC1:
.string "Hello bob3"
.section .text.startup,"ax",@progbits
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB13:
.cfi_startproc
subq $24, %rsp
.cfi_def_cfa_offset 32
movl $.LC0, %edi
xorl %eax, %eax
leaq 12(%rsp), %rsi
call scanf
movl $.LC1, %edi
call puts
xorl %eax, %eax
addq $24, %rsp
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE13:
.size main, .-main
.ident "GCC: (Debian 4.6.3-1) 4.6.3"
.section .note.GNU-stack,"",@progbits
如果你熟悉彙編,你可以看看,大會輸出。 – Mysticial
我敢打賭,你甚至可以強制它在編譯時做足夠的詭計(SFINAE和whatnot)。 – Lalaland
對於這種形式的問題,唯一真正正確的答案是「允許,但不是必須的」。在這種情況下,添加一個「編譯器通常不能在浮點計算上做很多代數優化,除非你使用'以*正確性*開關爲代價'優化速度」。 – zwol