gpt4 book ai didi

c++ - 为什么非成员静态 constexpr 变量不隐式内联?

转载 作者:可可西里 更新时间:2023-11-01 18:24:17 39 4
gpt4 key购买 nike

在 C++17 中,我们得到了内联变量,我假设全局 constexpr 变量是隐式内联的。但显然这仅适用于静态 member 变量。

这背后的逻辑/技术限制是什么?

来源:

A static member variable (but not a namespace-scope variable) declared constexpr is implicitly an inline variable.

最佳答案

这里的重点是命名空间范围内的 constexpr int x = 1; 在 C++14 中具有内部链接。

如果在不更改内部链接部分的情况下将其隐式内联,则更改将无效,因为内部链接意味着无论如何都无法在其他翻译单元中定义它。它损害了可教性,因为我们希望像 inline constexpr int x = 1; 这样的东西默认获得外部链接(毕竟,内联的全部要点是允许相同 要在多个翻译单元中定义的变量)。

如果你使它与外部链接隐式内联,那么你会破坏现有代码:

// TU1
constexpr int x = 1;

// TU2
constexpr int x = 2;

这个完全有效的 C++14 将成为 ODR 违规。

关于c++ - 为什么非成员静态 constexpr 变量不隐式内联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51051787/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com