zoukankan      html  css  js  c++  java
  • 所谓“编译器以引用对象的类型做为auto的类型”自测代码

    
    
    #include <iostream>
    
    class CTestA {
    public:
      CTestA(){
        std::cout<<"CTestA(){"<<std::endl;
      }
      CTestA(const CTestA &){
        std::cout<<"CTestA(const CTestA &){"<<std::endl;
      }
    
      int value;
    };
    
    class CTestB {
    public:
      const CTestA & GetObj()const{return obj_;}
    private:
      CTestA obj_;
    };
    
    void funcTest() {
      CTestB obj; // CTestA(){
      auto objtt = obj.GetObj(); // CTestA(const CTestA &){
      // objtt 被推导的类型说明:obj.GetObj()返回的是引用对象,而auto推导的是“引用对象的类型”也就是 CTestA ,
      // 所以这是个变量定义,而不是引用别名绑定,所以会调用拷贝构造函数
      const CTestA & objttt2 = obj.GetObj();
      const auto & objt2222 = obj.GetObj(); // 没有构造函数调用
      auto & objt222222 = obj.GetObj(); // 没有构造函数调用 objt222222是对常量的引用
     // objt222222.value = 999; // 编译不过,error C3490: 由于正在通过常量对象访问“value”,因此无法对其进行修改
      CTestA  objttt3 = obj.GetObj(); //CTestA(const CTestA &){
    }

      顺便说下底层const,比较好的记忆方法,可以记为 const修饰的是指针指向的那个对象的性质

  • 相关阅读:
    VM player无法联网问题
    寄存器
    linux下的文件操作
    linux的切换目录操作
    linux的ls -al指令
    python对ASC码的加减
    ASC码速记
    pyhton的返回值
    intellij 调试方法
    2015,5.10
  • 原文地址:https://www.cnblogs.com/xiarl/p/14512822.html
Copyright © 2011-2022 走看看