编译器会忽略我的函数的内联限定符吗?

时间:2016-05-07 19:49:11

标签: c++ inline

我读到在一个函数中有多行会伪造"内联",如果是这样我怎么知道我的函数被内联的时候,反之亦然:/

inline int foo(int x, int y)
{
   cout<<"foo-boo";
   return (x > y)? x : y;
}

2 个答案:

答案 0 :(得分:1)

inline 绝不与函数 1 中的行数相关。它只是一个编译器提示,编译器,无论如何都必须遵循。声明inline时函数是否真正内联,是实现定义的 从C ++ 14标准草案N3690,§7.1.2:

  

具有inline说明符的函数声明(8.3.5,9.3,11.3)   声明一个内联函数。 gzip_lines说明符表示   实现内联函数体的替换   呼叫点优先于通常的函数调用机制。   在通话时执行此内联替换不需要实现 [...]

(格式化我的。)

有特定于编译器的选项和属性来启用/禁用所有函数的内联,并执行其他相关的操作。查看编译器的文档以获取更多信息。

1 在决定是否内联函数时,编译器可以考虑函数的行数,但这是实现定义的,而不是标准所要求的。

答案 1 :(得分:1)

请记住,内联只是对编译器的请求,而不是命令。编译器可以忽略内联请求。编译器可能不会在以下情况下执行内联:

  1. 如果函数包含循环。 (for,while,do-while)
  2. 如果函数包含静态变量。
  3. 如果函数是递归的。
  4. 如果函数返回类型不是void,则函数体中不存在return语句。
  5. 如果函数包含switch或goto语句。