【问题标题】:Calling a default constructor in a constructor argument [duplicate]在构造函数参数中调用默认构造函数[重复]
【发布时间】:2018-01-19 02:57:26
【问题描述】:

我有一个带有默认构造函数的类 A 和一个带有将类 A 的对象作为唯一参数的构造函数的类 B

作为创建 B 类对象的自然方式,我会考虑

B b(A());

但编译器将此解释为函数声明。

我知道

B b((A()));

B b {A()};

是替代品。但我的问题是:如何将第一个版本解释为函数声明?从我的角度来看,它看起来不像一个。

【问题讨论】:

  • 好的,它是重复的。但是很难发现其他两个问题与这个问题有关。

标签: c++


【解决方案1】:

第一个版本如何解释为函数声明?

这只是一个语言规则:在 C++ 中所有可以被解释为声明被解释就这样。


以下代码:

B b(A());

可以解释为名称为 b 的函数的声明:

  • 返回B类型的对象。

  • 将(指向a的)函数作为参数(未提供参数名称),返回A类型的对象。

所以它解释为声明,因为它可以被解释为这样。

【讨论】:

  • 但是怎么可能是函数声明呢? (稍微修改了我的问题。)
  • @FrankPuffer 我已经更新了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 2017-07-28
  • 2014-03-24
  • 2020-05-14
相关资源
最近更新 更多