gpt4 book ai didi

c++ - C++中类的隐式成员函数

转载 作者:太空狗 更新时间:2023-10-29 21:24:55 25 4
gpt4 key购买 nike

C++中类的隐式成员函数是:根据维基: http://en.wikipedia.org/wiki/Special_member_functions

默认构造函数(如果没有显式声明其他构造函数)

复制构造函数,如果没有显式声明移动构造函数或移动赋值运算符。如果声明了析构函数,则不推荐生成复制构造函数。

如果没有显式声明复制构造函数、移动赋值运算符或析构函数,则移动构造函数

复制赋值运算符,如果没有显式声明移动构造函数或移动赋值运算符。如果声明了析构函数,则不推荐生成复制赋值运算符。

如果没有显式声明复制构造函数、复制赋值运算符或析构函数,则移动赋值运算符

析构函数

按照下面的链接:

http://archives.cs.iastate.edu/documents/disk0/00/00/02/43/00000243-02/lcpp_136.html

默认构造函数(即没有参数的构造函数,(第 12.1 节 [Ellis-Stroustrup90]),如果没有为该类声明构造函数(具有任意数量的参数)。

一个复制构造函数(第 12.1 节 [Ellis-Stroustrup90]),如果没有声明复制构造函数的话。

析构函数(第 12.4 节 [Ellis-Stroustrup90]),如果未声明析构函数。

赋值运算符([Ellis-Stroustrup90] 的第 5.17 和 12.8 节),如果没有声明赋值运算符。

按照下面的链接:

http://www.picksourcecode.com/ps/ct/16515.php

默认构造函数

拷贝构造函数

赋值运算符

默认析构函数

地址运算符

有人可以给出代码示例吗:移动构造函数、复制赋值运算符、移动赋值运算符、赋值运算符、地址运算符它们被用作隐式成员函数而不是显式定义。

谢谢

最佳答案

#include <iostream>

/* Empty struct. No function explicitly defined. */
struct Elem
{ };

/* Factory method that returns an rvalue of type Elem. */
Elem make_elem()
{ return Elem(); }


int main() {

/* Use implicit move constructor (the move may be elided
by the compiler, but the compiler won't compile this if
you explicitly delete the move constructor): */
Elem e1 = make_elem();

/* Use copy assignment: */
Elem e2;
e2 = e1;

/* Use move assignment: */
e2 = make_elem();

/* Use address operator: */
std::cout << "e2 is located at " << &e2 << std::endl;

return 0;
}

上面的例子使用了一个空类。您可以用具有真实移动语义的数据成员填充它(即移动与复制真正不同的成员),例如std::vector,您将自动获得移动语义,而无需专门为您的类定义移动构造函数或移动赋值运算符。

关于c++ - C++中类的隐式成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14868154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com