c++ - 即使类不包含数据,C++ 14 是否仍会生成默认函数?

标签 c++ c++14

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

class Empty {}
Empty E1; // Default constructor.
Empty E2 ( E1 ); // Default copy constructor. 
E1 = E2; // Default assignment operator. 

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

最佳答案

probably some other functions.

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

Considering that there really is nothing to initialize, as the class is empty, does the C++ still generate some sort of code for the stated functions?

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

因为你有一个空类,如果定义了特殊成员,它们将什么都不做。

关于c++ - 即使类不包含数据,C++ 14 是否仍会生成默认函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52138353/

相关文章:

c++ - 如何有条件地在具有相同签名的两个构造函数之间切换?

c++ - 英特尔 C++ 编译器 : What is highest GCC version compatibility?

c++ - 从 std::map 调用函数

C++如何测试函数使其抛出错误?

c++ - Openssl,无效参数 ' Candidates are: int BN_set_word(bignum_st *, ?) '

c++ - 返回 (\r) 中断 cout

c++ - 如何正确实现 C++ 类析构函数

visual-studio-2013 - MS Visual Studio 2013 中没有 <optional> - 该怎么办?

C++ CLR 不会在调试之外编译

c++ - 将 template<derived> 分配给 template<base> 变量