C++ - 如果构造函数是私有的,这会做什么?

发布于 2024-11-25 09:46:06 字数 192 浏览 0 评论 0原文

在下面的代码中,为什么编译器不抱怨 mClass2?

class CMyClass{
private:
    CMyClass(){}
};

void TestMethod(){
    CMyClass mClass1;   //Fails.
    CMyClass mClass2(); //Works.
}

In the code below, why does the compiler not complain for mClass2?

class CMyClass{
private:
    CMyClass(){}
};

void TestMethod(){
    CMyClass mClass1;   //Fails.
    CMyClass mClass2(); //Works.
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夏夜暖风 2024-12-02 09:46:06

因为您刚刚声明了一个零参数的函数 mClass2,它返回一个 CMyClass。这是一个有效的选项,因为可能存在该函数可以访问的静态 CMyClass 实例。请注意,CMyClass 仍然有一个公共复制构造函数。

(为了说服自己,将此模块编译为汇编程序,并观察注释掉 CMyClass mClass2(); 行会产生相同的输出。)

Because you've just declared a function mClass2 of zero arguments that returns a CMyClass. That's a valid option since there could be, say, a static CMyClass instance which that function has access to. Note that CMyClass still has a public copy constructor.

(To convince yourself, compile this module to assembler and observe that commenting out the line CMyClass mClass2(); produces the same output.)

慕烟庭风 2024-12-02 09:46:06

因为它是声明一个函数,而不是像你想象的那样调用构造函数。

这被称为最令人烦恼的解析 在 C++ 中。

CMyClass mClass2(); 

声明一个函数 mClass2(),它不带参数并返回 CMyClass

Because it is declaring a function and not calling the constructor as you think.

This is called as the Most Vexing Parse in c++.

CMyClass mClass2(); 

declares a function mClass2() which takes no parameter and returns CMyClass

懒的傷心 2024-12-02 09:46:06

第二个是函数声明。

The second one is a function declaration.

等待我真够勒 2024-12-02 09:46:06

人们应该使用 {} 括号转向 C++0x/C++11 中的统一语法初始化,从而消除此问题。

C类{};

http://www2.research.att.com/~ bs/C++0xFAQ.html#uniform-init

People ought to move to the uniform syntax initialization in C++0x/C++11 using the {} brackets instead which removes this issue.

Class C{};

http://www2.research.att.com/~bs/C++0xFAQ.html#uniform-init

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文