Tah*_*lil 3 c++ pointers stdstring
我对以下代码感到困惑:
string _str = "SDFDFSD";
char* pStr = (char*)_str.data();
for (int i = 0; i < iSize; i++)
pStr[i] = ::tolower(pStr[i]);
Run Code Online (Sandbox Code Playgroud)
这里_str.data()回来了const char*.但是我们将它分配给一个char*.我的问题是,
_str.data()返回指向常量数据的指针.如何将它存储在指向数据的指针中?数据是不变的吗?如果我们将它分配给char指针而不是像我们在for语句中那样改变它,这对于常量数据是不可能的.
不要那样做.在这种情况下可能没问题,但正如文档所述data():
通过进一步调用修改对象的其他成员函数,可以使返回的指针无效.
程序不得更改此序列中的任何字符.
因此,如果你保持指针,你可能会非常意外地写入无效内存.或者,实际上,破坏了std :: string的实现.我几乎可以说不应该暴露这个功能.
std :: string operator[]为此提供了非const .
string _str = "SDFDFSD";
for (int i = 0; i < iSize; i++)
_str[i] = ::tolower(_str[i]);
Run Code Online (Sandbox Code Playgroud)