C++ 使用结构名作为函数

C++ 使用结构名作为函数,c++,function,data-structures,struct,C++,Function,Data Structures,Struct,我试图理解以下行的作用: BStats stats = BStats(); 结构定义如下: struct BStats { unsigned a; unsigned b; BStats& operator+=(const BStats& rhs) { this->a += rhs.a; this->b += rhs.b; return *this; } }; 但我不知道这条线

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

BStats stats = BStats();
结构定义如下:

struct BStats
{
    unsigned a;
    unsigned b;

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

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

就像任何类一样,结构具有由编译器自动创建的默认构造函数。在您的例子中,BStats()只调用默认构造函数,尽管显式调用没有任何用处。

与任何类一样,结构具有由编译器自动创建的默认构造函数。在您的情况下,BSTStand()只调用默认构造函数,尽管显式调用无效。C++类和结构中的

< P>几乎是相同的(区别在于C++结构是公共的类,其中类是私有的默认属性)。因此,就像调用构造函数一样,C++类和结构中的

< p>几乎是相同的(区别在于C++结构是公共的类,其中一个类是私有的),这就像调用构造函数。< /p> < p>表达式在代码中描述:5.2.3/ 2:

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

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


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

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

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

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


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

@basak您会感到惊讶。。。。但是
BStats stats()
不调用任何构造函数,它甚至不声明类型为
BStats
的对象,而是声明一个不带参数并返回
BStats
的函数。。。谷歌最令人烦恼-parse@basak你会惊讶的。。。。但是
BStats stats()
不调用任何构造函数,它甚至不声明类型为
BStats
的对象,而是声明一个不带参数并返回
BStats
的函数。。。谷歌最烦人的解析