发布于 2019-10-11 14:51:21
这两个链接都没有提到
inline变量是否是内联的,因为编译器可以像内联函数一样对它们进行内联。
这很可能是因为没有理由提到这样的事情。你的期望是建立在一个错误的前提之上的。inline关键字与编译器是否可以内联函数无关。编译器可以选择内联未标记为inline的函数,也可以选择不内联标记为inline的函数。从一开始就存在这种情况,即使在首次引入inline关键字时也是如此。
曾经有一段时间,inline关键字是编译器的提示,但即使是这样,它也只是一个提示。编译器总是可以自行决定哪些函数可以内联。从那时起,编译器就比程序员更好地决定哪些函数是高效的。因此,大多数现代编译器忽略了所谓的提示(完全优化)。
将其替换为呼叫站点的实际值。
这在一般情况下是无法做到的。函数调用可以被编译器替换为函数的内容(它的主体),因为编译器知道函数的内容是什么。相反,编译器不知道变量的内容(其值)。毕竟,这通常是声明变量的意义所在。由于编译器不知道“实际值”,所以编译器无法使用该值来替换从变量在内存中的位置获取值。
但是,在编译器可以推断变量值的特定情况下,也可以这样做。与函数一样,由编译器决定是在机器指令中直接使用该值,还是从变量的内存位置检索该值。关键字的使用对此决定没有任何影响(尽管在完全优化时,我希望只要它符合寄存器,就可以使用该值)。唯一相关的关键字是constexpr,这使得编译器更容易推断变量的值。
https://stackoverflow.com/questions/58342373
复制相似问题