C++中的空类编译器默认隐式声明哪些成员函数【CSDN】

C++中的空类编译器默认隐式声明哪些成员函数【CSDN】View Code

class Empty 
{
public:
Empty();
Empty(const Empty&);
~Empty();
Empty& operator=(const Empty& rhs);
Empty* operator&();
const Empty* operator&() const;
};


让我不解的是网上为何流传上述的答案,而且我隐约记着在哪本本权威的书上看到这个说法的,最近偶然翻了一下
侯捷翻译的中文简体《Effective c++, 2nd》 这本书终于找到了答案:

条款45: 弄清C++在幕后为你所写、所调用的函数

一个空类什么时候不是空类? ---- 当C++编译器通过它的时候。如果你没有声明下列函数,体贴的编译器会声明它自己的版本。这些函数是:一个拷贝构造函数,一个赋值运算符,一个析构函数,一对取址运算符。另外,如果你没有声明任何构造函数,它也将为你声明一个缺省构造函数。所有这些函数都是公有的。换句话说,如果你这么写:

class Empty{};

和你这么写是一样的:

class Empty {
public:
Empty(); // 缺省构造函数
Empty(const Empty& rhs); // 拷贝构造函数

~Empty(); // 析构函数 ---- 是否
// 为虚函数看下文说明
Empty&
operator=(const Empty& rhs); // 赋值运算符

Empty* operator&(); // 取址运算符
const Empty* operator&() const;
};
对于这个问题,早有读者向书的作者Scott Meyers提出了疑问,Scott Meyers也认为上边的答案是有问题的


正解:

class Empty
{
public:
Empty();
Empty(const Empty&);
~Empty();
Empty& operator=(const Empty& rhs);
}

 

原文链接: https://www.cnblogs.com/guyan/archive/2011/12/20/2294148.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++中的空类编译器默认隐式声明哪些成员函数【CSDN】

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/38885

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午3:30
下一篇 2023年2月8日 下午3:31

相关推荐