• 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 }
  • 相关阅读:
    Java垃圾回收机制
    Mybatis 通用 Mapper 和 Spring 集成
    MyBatis:SQL语句中的foreach的详细介绍
    PageHelper补充
    Mybatis分页插件PageHelper
    定时任务
    权限框架Apache Shiro 和 Spring Security
    Navicat操作数据库时一直显示加载中
    BigDecimal使用中的一些注意事项
    WPF应用程序嵌入第三方exe
  • 原文地址:https://www.cnblogs.com/Agravity/p/6131033.html
Copyright © 2020-2023  润新知