码迷,mamicode.com
首页 > 其他好文 > 详细

所谓“编译器以引用对象的类型做为auto的类型”自测代码

时间:2021-03-11 14:17:16      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:变量定义   div   cpp   bsp   调用   自测   one   private   就是   

 

class CTestA {
public:
  CTestA(){
    std::cout<<"CTestA(){"<<std::endl;
  }
  CTestA(const CTestA &){
    std::cout<<"CTestA(const CTestA &){"<<std::endl;
  }

};

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(); // 没有构造函数调用
  CTestA  objttt3 = obj.GetObj(); //CTestA(const CTestA &){
}

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

所谓“编译器以引用对象的类型做为auto的类型”自测代码

标签:变量定义   div   cpp   bsp   调用   自测   one   private   就是   

原文地址:https://www.cnblogs.com/xiarl/p/14512822.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!