zoukankan      html  css  js  c++  java
  • c++ 编译器会绕过拷贝构造函数

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

    string null_book = "999";  //1

    改写为

    string null_book("999");  //2

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

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

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

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

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

    string str = string();

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

  • 相关阅读:
    编码问题
    Linux环境给文件重命名
    FIFO简记
    图像去模糊
    matlab直方图均衡,使用向量优化
    研究方向
    FPGA学习笔记之格雷码、边沿检测、门控时钟
    [转]关于凸优化的一些简单概念
    SSD果然劲爆!
    Qunie问题
  • 原文地址:https://www.cnblogs.com/uangyy/p/5516935.html
Copyright © 2011-2022 走看看