c++ - 默认构造函数 C++

标签 c++ constructor default-constructor most-vexing-parse

我试图了解默认构造函数(如果您不编写则由编译器提供)与您自己的默认构造函数的工作原理。

例如我写了这个简单的类:

class A
{
    private:
        int x;
    public:
        A() { std::cout << "Default constructor called for A\n"; }
        A(int x)
        {
            std::cout << "Argument constructor called for A\n";
            this->x = x;
        }
};

int main (int argc, char const *argv[])
{
    A m;
    A p(0);
    A n();

    return 0;
}

输出是:

调用 A 的默认构造函数

为 A 调用的参数构造函数

所以对于最后一个调用了另一个构造函数,我的问题是在这种情况下 n 有哪一个和哪种类型?

最佳答案

 A n();

声明一个名为 n 的函数,它不接受任何参数并返回一个 A

因为它是一个声明,所以没有代码被调用/执行(尤其是没有构造函数)。

在那个声明之后,你可以这样写

A myA = n();

这会编译。但是就是连接不上!因为没有函数n的定义。

关于c++ - 默认构造函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22835517/

相关文章:

c++ - 初始化类成员 - 默认值还是成员初始化列表?

c++ - SAPI 识别超过 2 个属性

c++ - 我在这里做错了什么?我的编译中有几个 "no match for operator"错误

c# - 在 C# 中不使用参数将信息传递给构造函数

C++ 无限制 union 解决方法

c++ - 默认构造函数是否总是初始化所有成员?

c++ - 在 gtest 中将两个数组作为参数传递

c++ - Boost Asio - 使用 shared_ptr 处理解析器和套接字

java - 在 KNIME 中使用外部 java 库。为什么一个类的初始化失败而另一个类的初始化成功?

javascript - 使用构造函数与闭包创建对象