Я сталкивался с этим удивительным онлайн-редактором https://godbolt.org/
который показывает версию сборки вашего кода.
Я также читал о новых возможностях C ++ 11 и узнал о constexpr.
взгляните на квадратную функцию ниже:
constexpr int square(int num) {
return num * num;
}
int main()
{
int result = square(2);
return 0;
}
и следующий код сборки, сгенерированный для двух версий (constexpr и inline)
CONSTEXPR
main:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 4
mov eax, 0
pop rbp
ret
INLINE
square(int):
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov eax, DWORD PTR [rbp-4]
imul eax, DWORD PTR [rbp-4]
pop rbp
ret
main:
push rbp
mov rbp, rsp
sub rsp, 16
mov edi, 2
call square(int)
mov DWORD PTR [rbp-4], eax
mov eax, 0
leave
ret
Я везде читал, что подобные функции могут быть встроены, но почему в asm-версии есть код вызова функции? Согласно встроенному определению этого следует избегать, верно?