首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >即使类不包含数据,C++ 14仍然生成默认函数吗?

即使类不包含数据,C++ 14仍然生成默认函数吗?
EN

Stack Overflow用户
提问于 2018-09-02 23:21:43
回答 1查看 411关注 0票数 6

时隔16年后,我正在重读斯科特·梅耶斯的《Effective C++》。虽然我还没有读过最新的C++标准,但我注意到,自从第二版Effective C++编写以来,C++已经发生了变化。Scott Meyer在他的书的第三版中提到,即使你有一个空类,这意味着没有什么要初始化或分配的,C++编译器仍然会生成至少3个默认函数,即默认构造函数、默认复制构造函数、赋值运算符,可能还有其他一些函数。根据Meyer先生的说法,以下代码将导致生成上述函数。

代码语言:javascript
运行
复制
class Empty {}
Empty E1; // Default constructor.
Empty E2 ( E1 ); // Default copy constructor. 
E1 = E2; // Default assignment operator. 

考虑到确实没有什么可初始化的,因为类是空的,那么C++是否仍然为所述函数生成某种代码?

EN

回答 1

Stack Overflow用户

发布于 2018-09-02 23:25:40

可能是一些其他函数。

是的,移动构造函数和移动赋值运算符。就这样。

考虑到确实没有什么可初始化的,因为类是空的,C++是否仍然为所述函数生成某种类型的代码?

有时候。发生的情况是声明了这些特殊的成员,但没有定义。它们只在使用时定义(即odr-usedconstant evaluated),否则,不会为它们生成代码,因为它们没有定义。

因为您有一个空类,所以如果定义了特殊成员,它们将不会执行任何操作。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52138353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档