【问题标题】:classname classobject(); does not invoke any constructor [duplicate]类名类对象();不调用任何构造函数[重复]
【发布时间】:2019-08-07 19:12:09
【问题描述】:

如果我有以下情况:

#include <iostream>

using namespace std;

class A {
public:
    A() {
        cout << "Inside A" << endl;
    }
};

int main() {
    A a();
    return 0;
}

为什么没有调用构造函数?

【问题讨论】:

标签: c++ c++11


【解决方案1】:

如果某些东西看起来像函数声明,则 C++ 标准要求将其视为函数声明。

A a(); 不会默认构造 a 类型的 A 对象。它声明了一个函数a,它不接受输入参数并返回一个A 对象作为输出。

要默认构造一个变量a,你需要去掉括号:

A a;

或者,在 C++11 及更高版本中,您可以使用花括号代替括号:

A a{};

【讨论】:

  • 也许您也应该在答案中的某处提及“Most Vexing Parse”,以供将来搜索以及为 OP 提供一些关键字进行研究..
  • @JesperJuhl A a(); 实际上并不是“最令人烦恼的解析”的一个例子,这就是我没有提到它的原因。尽管它通常与“最令人头疼的解析”混淆。
猜你喜欢
  • 2019-12-20
  • 2011-03-16
  • 2021-01-20
  • 2015-09-30
  • 2019-09-28
  • 2018-02-28
  • 2017-01-05
  • 2021-07-15
相关资源
最近更新 更多