【问题标题】:When will compiler still generate the default constructor even with user defined constructors?即使使用用户定义的构造函数,编译器何时仍会生成默认构造函数?
【发布时间】:2014-06-16 11:37:36
【问题描述】:

在《C++ Concurrency in Action》附录A.3一书中,在介绍默认函数时,它说:

一般情况下,如果你手动编写任何其他构造函数,编译器将不再为你生成默认构造函数,所以如果你想要一个你必须编写它,这意味着你失去了这个奇怪的初始化属性。然而, 通过将构造函数显式声明为默认,你可以强制编译器为你生成默认构造函数,并保留该属性。

这是否意味着在某些情况下(除了显式添加=default)即使使用用户定义的构造函数,编译器仍会生成默认构造函数?如果是,这些情况是什么?或者我只是在这里挑剔的话。

【问题讨论】:

  • 不,它只是它所说的意思,即= default是它的意思。

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


【解决方案1】:

这是由 C++11 12.1/5 回答的:

如果X 类没有用户声明的构造函数,则没有参数的构造函数被隐式声明为默认构造函数。

因此,只要您声明了任何其他构造函数(即使是默认的或已删除的),就没有隐式声明的默认构造函数。

例子:

#include <type_traits>

struct A { };

struct B { B(B &&) = delete; };

static_assert(std::is_default_constructible<A>::value, "A");
static_assert(!std::is_default_constructible<B>::value, "B");

【讨论】:

    猜你喜欢
    • 2019-09-01
    • 1970-01-01
    • 2016-12-16
    • 2018-10-04
    • 2014-03-12
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多