作者建议N-ary构造函数受益于explicit
关键字的C ++ 11版本。
如果你有多个构造函数参数,那么在C ++ 11中有什么变化可以使这个关键字变得有用?
答案 0 :(得分:16)
在C ++ 11中,如果你有一个具有多个参数的类A
的非显式构造函数(这里我以A::A(std::string, int, std::string)
为例),你可以初始化一个参数带括号初始化的类型:
void foo(A a);
foo({"the", 3, "parameters"});
同样,您可以对返回值执行相同的操作:
A bar() {
return {"the", 3, "parameters"};
}
但是,如果构造函数是explicit
,则这些将不会编译。因此,explicit
关键字现在对所有构造函数都很重要,而不仅仅是转换构造函数。