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