constexpr类的全球类型

 OP尋一 发布于 2023-02-13 01:53

我的理解是constexpr类类型的全局变量几乎无法使用,因为

必须在每个TU中定义这样的对象,因为constexpr不允许对象的前向声明.

默认链接static会导致在内联函数中命名对象(ODR使用与否)以违反ODR,因为相应的inline定义具有不同的含义.

extern constexpr如果对象是ODR使用的,则每个TU的一个定义的声明将违反ODR规则,这在对其进行引用时发生.

引用隐式this参数,即使它已被成员函数使用.

如果您尝试通过引用传递对象,显然会发生这种情况.

如果您尝试按值传递对象也会发生这种情况,该值隐式使用副本或移动构造函数,根据定义,它通过引用传递.

如果extern constexpr即使没有使用ODR,也会声明对象,GCC和Clang都会抱怨ODR违规(多个定义).

这都是正确的吗?有没有办法让一个constexpr全局类类型没有包装在一个inline函数中?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有