Joe*_*eda 6 c c++ inline-functions
我事先知道,当用C或C++编写程序时,即使我将函数声明为"内联",编译器也可以自由地忽略它并决定不在每次(或任何)调用时展开它.
反之亦然吗?也就是说,如果编译器认为这样做会导致性能提升,编译器是否可以自动内联一个非定义为内联的非常短的函数?
另外两个子问题:这种行为是在ANSI标准的某处定义的吗?在这方面C是否与C++不同,或者它们的行为是否相同?
Fra*_*eux 11
inline关于函数是否将由编译器内联而言是非约束性的.这最初是它打算做的.但从那以后,人们已经意识到函数是否值得内联取决于函数本身的调用站点,并且最好留给编译器来决定.
来自https://en.cppreference.com/w/cpp/language/inline:
由于关键字inline的这个含义是非绑定的,编译器可以自由地使用内联替换任何未标记为内联的函数,并且可以自由地生成对内联标记的任何函数的函数调用.这些优化选择不会更改有关上面列出的多个定义和共享静态的规则.
编辑:既然您也要求C, 请访问https://en.cppreference.com/w/c/language/inline:
内联说明符的目的是作为编译器执行优化的提示,例如函数内联,它要求函数的定义在调用站点可见.为了优化,编译器可以(并且通常会)忽略内联说明符的存在或不存在.