明确的N-ary构造函数?

Kla*_*aim 10 c++ constructor explicit-constructor c++11

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

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

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

Jos*_*eld 16

在C++ 11中,如果你有一个A具有多个参数的类的非显式构造函数(这里我A::A(std::string, int, std::string)用作一个例子),你可以使用大括号初始化初始化该类型的参数:

void foo(A a);
foo({"the", 3, "parameters"});
Run Code Online (Sandbox Code Playgroud)

同样,您可以使用返回值执行相同的操作:

A bar() {
  return {"the", 3, "parameters"};
}
Run Code Online (Sandbox Code Playgroud)

但是,如果构造函数explicit不能编译.因此,explicit关键字现在对所有构造函数都很重要,而不仅仅是转换构造函数.