为什么 MyClass foo() 可以访问私有默认构造函数?

tem*_*ova -3 c++

下面的代码:

#include <iostream>

using namespace std;

class Myclass
{
private:
    Myclass ();

public:
    int num;
};

int main()
{
    Myclass foo();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在 Eclipse 中编译时不会出现任何警告或错误。

然而

#include <iostream>

using namespace std;

class Myclass
{
private:
    Myclass ();

public:
    int num;
};

int main()
{
    Myclass foo;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

给我这个错误:error: 'Myclass::Myclass()' is private within this context

为什么foo会给我这个错误,而 foo() 却没有?是foo()被误认为是函数还是date_type name()有特殊含义?

for*_*818 6

为什么 MyClass foo() 可以访问私有默认构造函数?

它不能(允许您调用私有构造函数的奇特技巧)。

foo() 是否被误认为是一个函数

Myclass foo(); 一个函数声明。错误在于期望它是别的东西。要调用构造函数,请编写:

Myclass foo;  // or
Myclass foo{}; 
Run Code Online (Sandbox Code Playgroud)

由于这个错误相当常见,编译器通常会发出警告。不要忽略警告,并在代码没有消息时提高警告级别。