明确的N-ary构造函数?

时间:2012-12-14 21:29:37

标签: c++ constructor c++11 explicit-constructor

在此演示文稿中:http://qtconference.kdab.com/sites/default/files/slides/mutz-dd-speed-up-your-qt-5-programs-using-c++11.pdf

作者建议N-ary构造函数受益于explicit关键字的C ++ 11版本。

如果你有多个构造函数参数,那么在C ++ 11中有什么变化可以使这个关键字变得有用?

1 个答案:

答案 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关键字现在对所有构造函数都很重要,而不仅仅是转换构造函数。