【问题标题】:In C++, is a constructor with only default arguments a default constructor?在 C++ 中,只有默认参数的构造函数是默认构造函数吗?
【发布时间】:2012-06-30 07:55:27
【问题描述】:

在以下代码中:

struct Foo
{
    Foo(int x=0);
};

构造函数算作默认构造函数吗?

【问题讨论】:

  • 默认构造函数在你没有定义的时候由编译器自动生成。所以我会说不,这不是因为你已经定义了它
  • @peacemaker 实际上,默认构造函数是没有参数的构造函数
  • @peacemaker:您将“默认提供”中的默认值与“默认调用”中的默认值混淆了。该标准使用该术语来指代后者。
  • @peacemaker:根据上下文,“自动生成”正式称为“隐式声明”或“隐式定义”。所以你实际上指的是“隐式声明的构造函数”。
  • 感谢大家更新术语!

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


【解决方案1】:

C++98 §12.1/5 (强调我的)

X 类的默认构造函数是可以在没有参数的情况下调用的 X 构造函数。如果没有用户为 X 类声明的构造函数,则隐式声明默认构造函数。

所以是的,它确实算作默认构造函数。 See also.

【讨论】:

  • 我以为我在某处读过一次。感谢您的澄清。
  • 谢谢!不知道有什么区别。
  • @panickal 可能值得注意的是,该示例也是一个转换构造函数,并且仍然带有隐式转换。
  • C++11对第二句稍作改动:如果类X没有用户声明的构造函数,则隐式声明无参数的构造函数为默认。跨度>
猜你喜欢
  • 2014-07-09
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 2012-02-26
  • 2023-03-20
相关资源
最近更新 更多