在 C++17 中,我们得到了内联变量,并且我假设全局 constexpr 变量是隐式内联的。
但显然这只适用于静态member变量。
这背后的逻辑/技术限制是什么?
source:
声明为 constexpr 的静态成员变量(但不是名称空间范围变量)隐式是内联变量。
这里的重点是constexpr int x = 1;
在 C++14 中,命名空间范围具有内部链接。
如果在不更改内部链接部分的情况下使其隐式内联,则更改将无效,因为内部链接意味着无论如何都无法在其他翻译单元中定义它。这会损害可教性,因为我们想要这样的东西inline constexpr int x = 1;
默认情况下获得外部链接(毕竟,内联的全部意义在于允许same要在多个翻译单元中定义的变量)。
如果你让它隐式地内联于外部链接,那么你就会破坏现有的代码:
// TU1
constexpr int x = 1;
// TU2
constexpr int x = 2;
这个完全有效的 C++14 将成为 ODR 违规。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)