用于创建对象的 consexpr

Constexpr for creating objects

本文关键字:consexpr 创建对象 用于      更新时间:2023-10-16

我试图弄清楚使用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);
}

而且没有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);
}

我预计constexpr的代码会少得多,因为内存应该在编译时初始化。

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

谢谢!

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

答案是,这两种情况之间存在很大差异。

在没有优化的情况下进行编译时,生成的代码存在实质性差异...... -德豪伊