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:那是错误的。它很好地影响了编译器如何处理它。特别是和外星人一起。它还被一些编译器用来作为内联函数的一个提示,即使它超出了阈值,它也会自动被内联。@奥拉夫,我确信所有现代编译器厂商都不再考虑内联为提示。好的答案。也许你可以把它格式化一点,让它更可读。谢谢