我试图了解以下行的作用:

BStats stats = BStats();


该结构定义如下:

struct BStats
{
    unsigned a;
    unsigned b;

    BStats& operator+=(const BStats& rhs)
    {
        this->a += rhs.a;
        this->b += rhs.b;
        return *this;
    }
};


但是我不知道这条线是做什么的。它在调用默认构造函数吗?

最佳答案

在5.2.3 / 2中的标准中描述了表达式BStats()


  表达式T(),其中T是非数组完整对象类型或(可能是cv限定的)void类型的简单类型说明符(7.1.5.2),将创建指定类型的右值,即value -初始化。


也就是说,该表达式创建一个Bstats类型的右值,该值已初始化。在您的特定情况下,值初始化意味着BStats结构的两个成员将被设置为零。

请注意,这与调用其他答案中提到的default-constructor的行为不同,因为默认的构造函数不能保证将成员设置为0。

10-01 23:03