函数调用在C/C++中使用常量优化

cor*_*ump 4 c c++ compiler-construction optimization

如果你有使用常量的函数调用,它没有副作用,它不依赖于任何东西,如下所示:

int foo(int a,int b)
{         
  return a+b;   
}

该函数是否内联?或者,也许是在编译时评估的函数,插入此评估的结果代替函数调用?

jco*_*der 7

我尝试用一​​个相当古老的gcc编译它 -

#include <iostream>

int foo(int a,int b)
{
    return a+b;
} 


int main()
{
    std::cout << foo(100, 123) ;
}
Run Code Online (Sandbox Code Playgroud)

主要编译到这 -

LFB1439:
    subq    $8, %rsp
.LCFI1:
    movl    $223, %esi
    movl    $_ZSt4cout, %edi
    call    _ZNSolsEi
    xorl    %eax, %eax
    addq    $8, %rsp
    ret
Run Code Online (Sandbox Code Playgroud)

所以它在编译时编译了添加到223.

显然,结果取决于您的代码和编译器,但这表明它可以并且可以在编译时内联和计算添加,如果可以的话.

  • @coredump - `constexpr`告诉编译器它应用的东西可以在**需要**编译时常量的上下文中使用.如果没有标记为"constexpr",则此类使用将是非法的. (3认同)