在循环初始化中使用带有静态的 constexpr
using constexpr with static in circular initialisation?
我试图了解如何使用来自不同来源的constexpr。但是我有一个问题,我想将下面的程序转换为使用 constexpr 而不是 const。这个程序是我的主程序的模板。
class B;
class A{
public:
constexpr A(int){}
const static B& obj;
};
class B:A{
public:
constexpr B(int x):A(x){}
const static B& obj;
};
const B& A::obj=B(10);
const B& B::obj=B(20);
在最后一行中,我想使用 constexpr 来确保这个 obj 变量在编译时存在,从而减小我的代码大小并进行优化,但根据标准不能使用 constexpr。它给出了有关多个声明的错误。如果我更改类 A 中的常量,则必须进行初始化。我想在 constexpr 函数中使用 obj 变量,并且由于 obj 在编译时中不存在,因此会发生错误。我问我该如何解决问题,因为如果无法做到这一点,那么代码的优化可能会受到 15% 的影响,这真的很大。
当constexpr
将常量应用于定义的对象时,您可以在最后一行或最后两行(如果这是您真正想要的)的const
之前使用 constexpr
,就像这样。
constexpr const B& A::obj=B(10);
constexpr const B& B::obj=B(20);
这行得通。在此处查看编译的演示。
相关文章:
- 添加静态constexpr成员是否会更改结构/类的内存映射
- 类内部和外部静态 constexpr 元组之间的差异
- 静态 constexpr 类成员变量对多线程读取是否安全?
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- constexpr函数中的静态constexpr变量
- 类无法访问自己的私有静态 constexpr 方法 - Clang bug?
- C++访问静态 constexpr 数组
- 初始化模板化类中的静态 constexpr 成员
- 静态 constexpr 成员变量初始化
- 是否使用静态 constexpr 变量 odr?
- 静态 constexpr 全局变量
- 使用静态 constexpr 成员的未解析外部符号
- 在模板定义中调用非静态constexpr成员函数
- 类本身内部的类对象的静态constexpr数组
- 为什么非成员静态 constexpr 变量不是隐式内联的?
- 类中的静态 constexpr 初始化链
- 静态 constexpr 的编译器优化
- 无法声明静态 constexpr char []
- 为什么 clang 并不总是为相同的静态 constexpr 产生常量值
- emplace_back会导致静态 constexpr 成员上出现链接错误