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

C++ Coding Standards 中提示用 string:c_str 与 C APIs 交互的有关问题

2012-02-05 
C++ Coding Standards 中提示用 string::c_str 与 C APIs 交互的问题.由此帖中代码引发的思考,查看了一下C

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本身是不会重新排序的嘛。

热点排行