Constexpr用于创建对象

Pet*_*lev 5 c++ constexpr

我试图弄清楚是否有通过constexpr而不是正常创建对象的性能提升.

这是代码片段constexpr.

class Rect
{
    const int a;
    const float b;
public:
    constexpr Rect(const int a,const float b)
    : a(a),b(b){}
};

int main()
{
     constexpr Rect rect = Rect(1,2.0f);
}
Run Code Online (Sandbox Code Playgroud)

没有constexpr.

class Rect
{
    int a;
    float b;
public:
    Rect(int a, float b)
    : a(a),b(b){}
};

int main()
{
    Rect rect = Rect(1,2.0f);
}
Run Code Online (Sandbox Code Playgroud)

constexpr因为内存应该在编译时初始化,所以我期待会有更少的代码.

我使用constexpr得当吗?如果不是这样,你可以使用constexpr在编译时创建对象,然后在没有任何运行时开销的情况下使用它们吗?

谢谢!

Pet*_*lev 0

事实证明,我包含了一些标头,这些标头负责代码的相似性。

答案是,这两种情况有很大区别。

在不进行优化的情况下进行编译时,生成的代码存在很大差异... -cdhowie