Bil*_*eal 16
该inline关键字实际上不会导致函数内联.任何最近的编译器都会在内联方面做出比你更好的决策.
在短lambda的情况下,函数可能会内联.
如果您尝试将该inline关键字与lambda 一起使用,答案是否定的,您不能使用它.
ken*_*ytm 13
如果可以,编译器将内联它.例如,在带有-O2的g ++ 4.5中,
#include <vector>
#include <algorithm>
int main () {
    std::vector<int> a(10);
    for (int i = 0; i < 10; ++ i) a[i] = i;
    asm ("Ltransform_begin: nop; nop; nop; nop; nop; nop; ");
    std::transform(a.begin(), a.end(), a.begin(), [] (int x) { return 2*x; });
    asm ("Lforeach_begin: nop; nop; nop; nop; nop; nop; ");
    std::for_each(a.begin(), a.end(), [] (int x) { printf("%d\n", x); });
    asm ("Lforeach_done: nop; nop; nop; nop; nop; nop; ");
    return 0;
}
生成2*x和printflambda完全内联的程序集.
# 9 "x.cpp" 1
    Ltransform_begin: nop; nop; nop; nop; nop; nop; 
# 0 "" 2
    .align 4,0x90
L13:
    sall    (%rax)
    addq    $4, %rax
    cmpq    %rax, %r12
    jne L13
# 13 "x.cpp" 1
    Lforeach_begin: nop; nop; nop; nop; nop; nop; 
# 0 "" 2
    .align 4,0x90
L14:
    movl    (%rbx), %esi
    leaq    LC0(%rip), %rdi
    xorl    %eax, %eax
LEHB1:
    call    _printf
LEHE1:
    addq    $4, %rbx
    cmpq    %r12, %rbx
    jne L14
# 17 "x.cpp" 1
    Lforeach_done: nop; nop; nop; nop; nop; nop; 
# 0 "" 2