首页 > 解决方案 > 类名类对象();不调用任何构造函数

问题描述

如果我有以下情况:

#include <iostream>

using namespace std;

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

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

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

标签: c++c++11

解决方案


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

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

要默认构造变量a,您需要删除括号:

A a;

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

A a{};


推荐阅读