C++ 编译器会忽略函数的内联限定符吗?
我读到一个函数中有多行会伪造内联,如果是这样,我如何知道我的函数何时内联,反之亦然:/C++ 编译器会忽略函数的内联限定符吗?,c++,inline,C++,Inline,我读到一个函数中有多行会伪造内联,如果是这样,我如何知道我的函数何时内联,反之亦然:/ inline int foo(int x, int y) { cout<<"foo-boo"; return (x > y)? x : y; } inline与function1中的行数没有任何关系。它只是一个编译器提示,编译器无论如何都没有义务遵循它。函数在声明为内联时是否真的内联,是由实现定义的。 来自C++14标准草案N3690,§7.1.2: 带有内联说明符的函数声明8
inline int foo(int x, int y)
{
cout<<"foo-boo";
return (x > y)? x : y;
}
inline与function1中的行数没有任何关系。它只是一个编译器提示,编译器无论如何都没有义务遵循它。函数在声明为内联时是否真的内联,是由实现定义的。
来自C++14标准草案N3690,§7.1.2:
带有内联说明符的函数声明8.3.5、9.3、11.3
声明一个内联函数。内联说明符向
在
调用点是常用函数调用机制的首选。
在调用点[…]执行此内联替换不需要实现
格式化我的
有编译器特定的选项和属性来启用/禁用所有函数的内联,并执行其他相关操作。有关更多信息,请查阅编译器文档
1编译器在决定是否内联函数时可以考虑函数的行数,但这是标准定义的实现,不是标准要求的。请记住,内联只是对编译器的一个请求,而不是命令。编译器可以忽略内联请求。在以下情况下,编译器可能无法执行内联: 如果函数包含循环。暂且 如果函数包含静态变量。 如果函数是递归的。 如果函数返回类型不是void,并且函数体中不存在return语句。 如果函数包含switch或goto语句。
inline很久以前就停止作为编译器提示了。也就是说,编译器不关心内联。然而,谁在乎链接器呢。@0x3l337你在哪里读到的?关于内联可能有用。@101010:那是错误的。它很好地影响了编译器如何处理它。特别是和外星人一起。它还被一些编译器用来作为内联函数的一个提示,即使它超出了阈值,它也会自动被内联。@奥拉夫,我确信所有现代编译器厂商都不再考虑内联为提示。好的答案。也许你可以把它格式化一点,让它更可读。谢谢