结构构造函数错误,为什么使用默认构造函数会调用错误

struct constructor error, why use default constructor function will call a error?

本文关键字:构造函数 错误 默认 调用 为什么 结构      更新时间:2023-10-16
#include <iostream>
using namespace std;
struct Foo{
    Foo(){}
    Foo(int){}
    void fun(){}
};
void main()
{
    Foo a(10);
    a.fun();
    Foo b();
    b.fun();//error
    Foo c = Foo(); // this is the right way to use default constructor?
    c.fun();
}

代码在编译时出错,因为b不是一种类,谁能告诉我什么是b?而Foo b()的含义呢?

这个问题通常被称为C++"最烦人的解析"。

Foo b();

这将声明一个名为 b 返回Foo 的函数。

它应该是公正的;

Foo b;

这将声明一个 Foo 类型的变量b,该变量将默认初始化(Foo有一个默认构造函数(。 Foo c = Foo();是的,这是一种替代的默认初始化(复制初始化(,但它通常更多地用于 POD 数据类型。

值得注意的是,对于 C++11(统一初始化(,以下内容将编译,并且可能是您的替代方案

Foo b{};

但它在这种情况下做同样的事情(关于构造b(。

正确的方法应该是:

Foo b;

您刚刚声明了一个名为 b 的函数。