关于string做形参的有关问题
关于string做形参的问题
类似于 void func(string str)这样以string对象作形参时,假如实参是test_string, 我在linux下用gdb调试时发现 str 和 test_string 的_M_p值是一样的。这个是不是表示对象数据域是指向同一个字符串呢? 这是不是默认拷贝构造函数执行位拷贝时造成的?
谢谢!
------解决方案--------------------
不是,只是一种优化,如果你尝试修改str,它就变了。
------解决方案--------------------
copy on write技术,修改时才复制一份
------解决方案--------------------
你把str[i]改成str.at(i) 看看改没改? 我这只有vc6,没办法试,而vc6下他们俩直接不相同
------解决方案--------------------
考虑到效率问题, 这种写法是不容易遇到的... 用引用或者指针吧.
类似于 void func(string str)这样以string对象作形参时,假如实参是test_string, 我在linux下用gdb调试时发现 str 和 test_string 的_M_p值是一样的。这个是不是表示对象数据域是指向同一个字符串呢? 这是不是默认拷贝构造函数执行位拷贝时造成的?
谢谢!
string
形参
拷贝
gdb
------解决方案--------------------
不是,只是一种优化,如果你尝试修改str,它就变了。
------解决方案--------------------
copy on write技术,修改时才复制一份
------解决方案--------------------
你把str[i]改成str.at(i) 看看改没改? 我这只有vc6,没办法试,而vc6下他们俩直接不相同
------解决方案--------------------
考虑到效率问题, 这种写法是不容易遇到的... 用引用或者指针吧.