使用结构名称作为函数

Using struct name as a function

本文关键字:函数 结构      更新时间:2023-10-16

我正在努力理解以下行的作用:

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()在5.2.3/2中的标准中进行了描述:

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

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

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

就像任何类一样,结构有一个由编译器自动创建的默认构造函数。在您的情况下,BStats()只是调用默认构造函数,尽管显式调用是无用的。

在C++中,类和结构几乎相同(不同之处在于C++结构是以public作为默认属性的类,其中类是私有的),所以这就像调用构造函数一样。