在 N 元构造函数上显式?

Posted

技术标签:

【中文标题】在 N 元构造函数上显式?【英文标题】:Explicit on N-ary constructors? 【发布时间】:2012-12-02 21:59:54 【问题描述】:

在此演示文稿中: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 中的哪些变化使这个关键字变得有用?

【问题讨论】:

【参考方案1】:

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

【讨论】:

你能举个例子,禁止大括号初始化是有用的吗?大括号初始化有什么危害? @Ali 在新标准 C++ 委员会公共论坛上有人指出这个问题应该或多或少地回答你的问题:***.com/questions/9157041/…

以上是关于在 N 元构造函数上显式?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中显式删除移动构造函数的用例 [关闭]

显式移动构造函数?

C++中派生类的构造函数怎么显式调用基类构造函数?

构造函数必须显式初始化没有默认构造函数的成员

爪哇。隐式超级构造函数 Employee() 未定义。必须显式调用另一个构造函数[重复]

具有显式构造函数的类是不是需要在 emplace 中使用分段构造?