使用默认构造函数加速的具体示例

我注意到默认构造函数比用户定义的构造函数效率更高。 几篇文章和SO线程已经提到了这一点。 然而,文章和SO线程仍然是抽象的或讨论空的构造函数。 下面我列出了一个浮动元组的具体示例。 我不明白为什么拥有额外的用户定义的构造函数会使程序运行两倍的时间(超过8000毫秒与4000毫秒,使用g ++且未进行优化)。 有人可以为这个具体示例进行解释吗? 然后希望我和更多的读者可以概括该知识。

#include <chrono>
#include <iostream>

#define EXTRA_CTOR 0


struct float2 {
    float x=0.0f, y=0.0f;

    float2() = default;
    #if EXTRA_CTOR
    float2(float a, float b) : x(a), y(b) {}
    #endif
};
float2 operator+(const float2& a, const float2& b) { return {a.x+b.x, a.y+b.y}; }


int main() {
    float2 a; a.x=1.0f; a.y=2.0f;
    float2 b; b.x=3.0f; b.y=4.0f;
    float2 c;

    auto t1 = std::chrono::high_resolution_clock::now();
    for (int i = 0; i < 1000000000; ++i) {
        c = a + b;
    }
    auto t2 = std::chrono::high_resolution_clock::now();
    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(t2-t1).count() << " milliseconds\n";

    return 0;
}
评论