读书人

C++ Coding Standards 中提示用 strin

发布时间: 2012-02-05 12:07:14 作者: rapoo

C++ Coding Standards 中提示用 string::c_str 与 C APIs 交互的问题.
由此帖中代码引发的思考,查看了一下 C++ Coding Standards by Herb Sutter, Andrei Alexandrescu

C++ Coding Standards Item 77 (P152)
They are compatible with C 's memory model: vector and string:: c_str CAN BE PASSED TO C APIs -- in both READ and WRITE modes, OF COURSE

这里专门有“Of Course”一说。但是与我印象中的说法有所冲突——似乎STL 不保证 c_str 指向的内存是可用的。而且,如果作为 WRITE mode 使用的话,晨星老大做了个实验,

string s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ";
strcpy(const_cast <char*> (s.c_str()), "b ");
cout < < s.length() < < endl;

输出32,“对象状态一致性遭破坏了。”

那么这里是二位大仙疏忽,还是 VC STL 有错,还是我们对 WRITE mode 的理解有误?
请先进指点。

[解决办法]
你在容器掌控之外改变它内部的对象的状态,不是自己找累么。就像std::map里的对象被外力野蛮地修改了一样,std::map本身是不会重新排序的嘛。

读书人网 >C++

热点推荐