首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“内联”变量可以像内联函数一样内联吗?

“内联”变量可以像内联函数一样内联吗?
EN

Stack Overflow用户
提问于 2019-10-11 13:30:59
回答 1查看 168关注 0票数 3

我读过关于inline变量、这里这里的文章,但这两个链接都没有提到inline变量是否是内联的,因为编译器可以像内联函数一样将它们内联。将其替换为呼叫站点的实际值。

我知道内联变量有外部链接和唯一的地址,但是它们是否像内联的函数?该属性是否适用于内联变量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-11 14:51:21

这两个链接都没有提到inline变量是否是内联的,因为编译器可以像内联函数一样对它们进行内联。

这很可能是因为没有理由提到这样的事情。你的期望是建立在一个错误的前提之上的。inline关键字与编译器是否可以内联函数无关。编译器可以选择内联未标记为inline的函数,也可以选择不内联标记为inline的函数。从一开始就存在这种情况,即使在首次引入inline关键字时也是如此。

曾经有一段时间,inline关键字是编译器的提示,但即使是这样,它也只是一个提示。编译器总是可以自行决定哪些函数可以内联。从那时起,编译器就比程序员更好地决定哪些函数是高效的。因此,大多数现代编译器忽略了所谓的提示(完全优化)。

将其替换为呼叫站点的实际值。

这在一般情况下是无法做到的。函数调用可以被编译器替换为函数的内容(它的主体),因为编译器知道函数的内容是什么。相反,编译器不知道变量的内容(其值)。毕竟,这通常是声明变量的意义所在。由于编译器不知道“实际值”,所以编译器无法使用该值来替换从变量在内存中的位置获取值。

但是,在编译器可以推断变量值的特定情况下,也可以这样做。与函数一样,由编译器决定是在机器指令中直接使用该值,还是从变量的内存位置检索该值。关键字的使用对此决定没有任何影响(尽管在完全优化时,我希望只要它符合寄存器,就可以使用该值)。唯一相关的关键字是constexpr,这使得编译器更容易推断变量的值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58342373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档