10

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

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

如果您有多个构造函数参数,C++11 中的哪些变化使这个关键字变得有用?

4

1 回答 1

16

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

void foo(A a);
foo({"the", 3, "parameters"});

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

A bar() {
  return {"the", 3, "parameters"};
}

但是,如果构造函数是 ,则explicit这些将无法编译。因此,explicit关键字现在对所有构造函数都很重要,而不仅仅是转换构造函数。

于 2012-12-14T21:34:35.800 回答