• 关于c++的string的operator =


    在 c++ primer 5 中在说到string的章节里面有这样一句话:

    string s5 = "hiya";  // copy initialization

    也就是说,这里说上面这句是拷贝初始化,也就是调用拷贝构造函数。而下面这句:

    string s6("hiya"); // direct initialization
    却又是直接初始化,然后我就再想,在 c++ 的初始化里面上面这两种不是等效的么?另外我也很好奇在string的实现里面 string s5 = "hiya"; 如果真的是拷贝初始化的话有没有中间生成一个临时变量(虽然不太可能,这样写效率显然很低)。于是去看 SGI STL的源码,找到关于 operator = 的部分是这样的:
      basic_string& operator=(const _CharT* __s)  // wc: = char*
        { return assign(__s, __s + _Traits::length(__s)); }

    显然这里可以说明没有中间变量的产生。

    后面我是用这两种方式在 vs 下面单步调试的:

    int main(int argc, char* argv[])
    {   
        int a = 0;
       string str = "wc";
       string str2("wcww");
         
        return 0;
    } 

    然后发现这两种初始化语句进入的构造函数是相同的,都是下面这个:

        basic_string(const _Elem *_Ptr)
            : _Mybase()
            {    // construct from [_Ptr, <null>)
            _Tidy();
            assign(_Ptr);
            }

    而这个并不是什么拷贝构造函数,就是一般的构造函数而已。所以最上面两句的构造都属于直接构造而没有拷贝构造。

  • 相关阅读:
    alt属性和title属性
    穷人和富人的区别
    JS经典源码:通用JavaScript脚本函数库
    网页弹出框
    男女交往必知15个真理
    alexa排名
    好男人找不到女朋友的根源
    小笑话集(全是经典!)不信你不笑(转)
    送到家服务网2009年3月26日顺利上线了!
    [转]互联网产品开发中的“快”字诀
  • 原文地址:https://www.cnblogs.com/xiezhw3/p/3983592.html
Copyright © 2020-2023  润新知