首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么VC的std:string似乎不是"lazy evaluation"的实现?解决方法

2012-03-30 
为什么VC的std::string似乎不是lazy evaluation的实现?More effective C++ 上面说,string应该是lazy eva

为什么VC的std::string似乎不是"lazy evaluation"的实现?
More effective C++ 上面说,string应该是lazy evaluation的实现,也就是"写时拷贝"。例如
string s1="abc";
string s2=s1;
这里s2所包含的char*指针指向s1的内容。除非s2的内容被修改,才先做一份拷贝。

但是我试验了一下,VC的实现不是这样的:

C/C++ code
#include<string>using namespace std;int main(void){    string s1="abc";    string s2=s1;    printf("%p,%p\n",s1.c_str(),s2.c_str());    return 0;}

发现两个指针的内容不同(Debug/Release都不同)。但是GCC下面实验发现是相同的。
这是为什么呢? VC的string实现没有使用lazy evaluation吗?

[解决办法]
本来对string的实现标准就没做任何规定,所以这个就不要有什么统一的想法了。
[解决办法]
老的版本好像是的(记不清了),新的版本不是
[解决办法]
lazy evaluation和copy on write完全是两码事。
另外现在就算要优化一般也是用引用计数,COW不常见。


[解决办法]
顺便取底层数据应该用data()。c_str()每次调用都不见得会相同。
(虽然C++11中是同义词了。)

热点排行