C++ C++;内联函数是否阻止复制?

C++ C++;内联函数是否阻止复制?,c++,inline,C++,Inline,假设编译器实际上内联foo这两条语句之间有性能差异吗 inline int foo (int val) { return val; } int main () { std::cout << foo(123) << std::endl; std::cout << 123 << std::endl; return 0; } inlineintfoo(intval){ 返回val; } int main(){ std::cou

假设编译器实际上内联
foo
这两条语句之间有性能差异吗

inline int foo (int val) {
  return val;
}

int main () {

  std::cout << foo(123) << std::endl;

  std::cout << 123 << std::endl;

  return 0; 
}
inlineintfoo(intval){
返回val;
}
int main(){
std::coutMy编译器(gcc 4.7.2)为两条语句生成几乎相同的代码:

_main:
LFB1018:
        pushq   %rbx
LCFI0:
        movq    __ZSt4cout@GOTPCREL(%rip), %rbx

; std::cout << foo(123) << std::endl;
        movl    $123, %esi
        movq    %rbx, %rdi
        call    __ZNSolsEi
        movq    %rax, %rdi
        call    __ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_

; std::cout << 123 << std::endl;
        movq    %rbx, %rdi
        movl    $123, %esi
        call    __ZNSolsEi
        movq    %rax, %rdi
        call    __ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_

        xorl    %eax, %eax
        popq    %rbx
LCFI1:
        ret
\u main:
LFB1018:
pushq%rbx
立法会十题:
莫沃__ZSt4cout@GOTPCREL(%rip),%rbx

;std::cout

为了确保情况确实如此,请使用gcc中的
-S
标志生成汇编代码并手动比较这两行代码


另外,请注意,inline关键字只是对编译器的提示,编译器可能会选择忽略它。对使用inline进行了深入讨论。

它们在我看来是一样的。您可以查看生成的程序集进行验证。它确实交换了前两条指令;知道为什么吗?否则它们是相等的。它为什么保留
%rbx