C++11 笔记

5.重载运算符

  本质上是一个函数。

  函数名为operator(+-*/……)

  如果一个运算符是成员函数,其左侧运算对象就绑定到隐式的this参数上。

 

  a.拷贝赋值运算符

    例如:

1 class Foo {
2     public:
3         Foo& operator=( const Foo& ); 
4 }

      注意,赋值运算符通常返回一个指向其左侧运算对象的引用。(这样就可以在一个表达式中连续使用=)

    若类内未定义,编译器会合成一个拷贝赋值运算符。

      它会将右侧运算对象的每个非static成员赋予左侧运算对象的对应成员。

  

   b.……运算符

 

 

4.初始化

  

1 int i = 0;
2 int i = {0};
3 int i{0};
4 int i(0);

注意下面这种初始化写法是错误的。

int i = (0);

  

  默认初始化:

    定义于任何函数体之外的内置类型变量会被初始化为0,函数体内不被初始化。

  

  直接初始化

    容器的emplace成员创建的元素都进行直接初始化

  拷贝初始化

    容器的insert或push成员创建元素进行拷贝初始化

 

3.关键字

     explicit:     抑制构造函数定义的隐式转换。所以,explicit构造函数只能用于直接初始化。

1 explicit Sales_data(const std::string &s):bookNo(s) {}
2 
3 Sales_data item1(null_book);  //可以进行直接初始化
4 
5 Sales_data item2 = null_book;  // 不能用于拷贝形式的初始化,因为不允许string 到 Sales_data的隐式的转换

 对了,这个关键字只能在类内声明构造函数的时候使用。

 

2.  默认构造函数:参数列表位空的构造函数

     拷贝构造函数:第一个参数是自身类类型的引用,且任何额外参数都有默认值的构造函数。

        所以这个参数还必须是引用类型,因为若是非引用类型就需要对参数进行拷贝初始化,然后调用自身导致无限循环

     移动构造函数:

 

1. 用auto作为函数的返回值?

不能直接使用auto的替换原来的返回类型。

但是可以在函数尾置返回类型中使用, 将auto放在函数名之前,与尾置返回类型配合指明函数的返回类型

1 auto fun() -> int{
2 
3     return 3;
4 }

 

posted @ 2016-12-04 16:09  Agravity  阅读(106)  评论(0编辑  收藏  举报