【发布时间】:2013-07-29 16:59:45
【问题描述】:
#include <iostream>
using namespace std;
struct Point
{
int x;
int y;
};
int main()
{
//Point p(2, 3); // error: no matching constructor for initialization of 'Point'
Point p{2, 3}; // fine
}
疑问> 如果我们使用统一初始化来初始化一个变量,是不是就不用定义对应的显式构造函数了?如上例所示,Point 类没有带有两个传入参数的构造函数,但统一初始化仍然有效。我在这里感到困惑,想知道我的问题的答案。
谢谢
【问题讨论】:
-
explicit constructor并不像您认为的那样。你的意思是,没有用户定义的构造函数。您的类型是聚合类型,甚至 C(和 c++89、c++03)也可以使用 brace-initialization 来初始化它们 -
@sehe:我不同意这是重复的。 答案可能相同(或相似,因为它只是关于聚合而不是 POD),但问题却大不相同。
-
对我来说,“显式构造函数”是指用户编写的构造函数。但是,对我来说,“
explicit构造函数”意味着使用“显式”关键字或等效关键字声明的构造函数(例如,具有“explicit”含义的隐式声明的继承构造函数)。 -
@sehe 我也不同意。这些问题是不同的,答案可能也应该不同(据我所知,它们是不同的)。
-
好吧。当然问题是不同的。从未询问过 exact 重复项。在我看来,OP 正在寻找相关信息,并且缺乏行话。我指出了它,但不明白为什么再次添加 this specific 问题会增加价值,只是因为它不是完全相同的问题。
标签: c++11