c++ - 内联函数什么时候不起作用?

标签 c++ inline

我是一名新手程序员。我们的教科书 sumitha arora class 12 ix edition 中有这些行:

The inlining does not work for the following situations:

  1. For functions that return values and are having a loop or switch or goto.

  2. For functions not returning values, if a return statement exists.

如果 1 和 2 为真,那么如何创建内联函数?

附言台词和书上的一模一样,没有改动

最佳答案

我不知道书中提到的编译器是什么。一般来说,这将取决于实际的编译器、可以内联的内容或何时生成函数体。

这些陈述并不像您想象的那样相互排斥。禁止内联的一般条件是函数中的一个分支,除了一个简单的 if 语句。 (1) 中的分支是循环和 goto。 (2) 中的分支是在 return;

时跳转到函数的末尾

编辑:

它高度依赖于编译器。嵌套的 if 可能有效。但是 switch 语句不同,因为它们通常使用跳转表而不是多个 if 语句来实现。跳转表包含类似于 goto 标签的位置。对于实际的编译器来说,这可能更加困难。因此,做出区分可能是明智的。

关于c++ - 内联函数什么时候不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23669716/

相关文章:

c++ - 如何在程序退出之前强制 boehm gc 全部收集

django 管理员内联查询集限制

c++ - 我是否必须在类主体之外定义纯虚拟析构函数?

c++ - 什么时候在带有头文件和目标文件的类方法中使用 'inline' 关键字?

c++ - 在 Windows 中获取当前注册的组织名称(公司名称)

c++ - boost::container::vector 无法使用 C++03 编译器进行编译

c++ - 测试给定 id 的任何进程目前是否正在 Linux 上运行的简单方法是什么?

c++ - Gtk 移动窗口超出约束

c - 内联汇编的原子增量

c++ - 我如何知道内联函数是否在被调用的地方被实际替换?