我的理解是constexpr
类类型的全局变量几乎无法使用,因为
必须在每个TU中定义这样的对象,因为constexpr
不允许对象的前向声明.
默认链接static
会导致在内联函数中命名对象(ODR使用与否)以违反ODR,因为相应的inline
定义具有不同的含义.
extern constexpr
如果对象是ODR使用的,则每个TU的一个定义的声明将违反ODR规则,这在对其进行引用时发生.
引用隐式this
参数,即使它已被成员函数使用.
如果您尝试通过引用传递对象,显然会发生这种情况.
如果您尝试按值传递对象也会发生这种情况,该值隐式使用副本或移动构造函数,根据定义,它通过引用传递.
如果extern constexpr
即使没有使用ODR,也会声明对象,GCC和Clang都会抱怨ODR违规(多个定义).
这都是正确的吗?有没有办法让一个constexpr
全局类类型没有包装在一个inline
函数中?