我正在尝试了解以下行的内容:
BStats stats = BStats();
结构定义如下:
struct BStats
{
unsigned a;
unsigned b;
BStats& operator+=(const BStats& rhs)
{
this->a += rhs.a;
this->b += rhs.b;
return *this;
}
};
但我不知道这条线的作用。它是否调用默认构造函数?
答案 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作为默认属性的类,其中类是私有的)所以它就像调用构造函数一样。