代码之家  ›  专栏  ›  技术社区  ›  Ravinder Singh

使用带有静态循环初始化的constexpr?

  •  2
  • Ravinder Singh  · 技术社区  · 7 年前

    我试着理解如何使用不同来源的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%的影响,这是非常巨大的。

    1 回复  |  直到 7 年前
        1
  •  1
  •   P.W    7 年前

    作为 constexpr 将常量应用于定义的对象,可以使用 常量表达式 之前 const

    constexpr const B& A::obj=B(10);
    constexpr const B& B::obj=B(20);
    

    这很管用。参见编译的演示 here .