使用struct name作为函数

时间:2012-03-01 19:50:56

标签: 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;
    }
};

但我不知道这条线的作用。它是否调用默认构造函数?

3 个答案:

答案 0 :(得分:3)

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

  

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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