5

C++ 中类的隐式成员函数是:根据 wiki: 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

默认构造函数

复制构造函数

赋值运算符

默认析构函数

地址运算符

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

谢谢

4

1 回答 1

4
#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;
}

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

于 2013-02-14T05:17:27.513 回答