C++ primer P442 P447:在拷贝初始化过程中,编译器可以跳过拷贝构造函数,直接创建对象。即,编译器允许将下面的代码 

string null_book = "";  //1

改写为

string null_book("");  //2

由于string的构造函数不是一个explicit的,所以说string类型允许从const char* 到string的隐式转换。

在行1中,首先将"999"隐式转化为一个string的临时对象,然后应该调用string的拷贝构造函数对null_book初始化。即

string temp_str("");
string null_book = temp_str; //或者 string null_book(temp_str);

在这里编译器会进行优化,跳过拷贝构造函数直接创建对象。使临时变量成为所要创建的对象。

类似的下面代码也会跳过拷贝构造函数

string str = string();

但是在这种情况下,拷贝构造函数必须是public的,否则编译会不通过。可能是因为如果拷贝构造函数是private的话,编译器会理解为不能够使用拷贝构造函数,进而不会进行这种优化。

最新文章

  1. 恢复MySQL主从数据一致性的总结
  2. 湖南附中模拟day1 瞭望塔
  3. linux 读写锁应用实例
  4. Linux:SSH错误"WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! "
  5. NodeJs读取源代码使用的字符集
  6. 如何把SKYPE的发送消息由enter改为ctrl+enter?
  7. Java基础知识强化40:StringBuffer类之StringBuffer的替换功能
  8. JavaScript面向对象之类的创建
  9. Java中动态代理技术生成的类与原始类的区别 (转)
  10. jQuery小例
  11. win10 系统右键菜单不显示文字(只有小图标)修复方法
  12. Spring Boot 系列总目录
  13. Redis数据过期策略详解
  14. HDU 3861 The King’s Problem 最小路径覆盖(强连通分量缩点+二分图最大匹配)
  15. 真正可用的安卓webview html图片上传限制突破处理(拍照+相册都可以用)
  16. ELK学习笔记之ELK搜集OpenStack节点日志
  17. 页面传递的都是string ; 每个标签要有name的原因是为了取值 因为传递给后台是键值对的形式
  18. P4238 【模板】多项式求逆
  19. 一个简单的JavaScript实例
  20. Qt——元对象和属性机制

热门文章

  1. java继承问题
  2. java动态代理实现与原理详细分析(【转载】By--- Gonjan )
  3. 04JavaScript程序语句
  4. Spring Boot 与消息
  5. 【Codeforces 1036C】Classy Numbers
  6. Leetcode 93.复制IP地址
  7. [luoguP1134] 阶乘问题(数论)
  8. noip模拟赛 第K小数
  9. codeforces 371c
  10. Django Rest FrameWork再练习