我感到困惑下面的代码中的数据:返回为const char *为char *,然后改变
string _str = "SDFDFSD";
char* pStr = (char*)_str.data();
for (int i = 0; i < iSize; i++)
pStr[i] = ::tolower(pStr[i]);
这里_str.data()
回报const char*
。但我们将其分配给char*
。我的问题是,
_str.data()
正在返回指向常量数据的指针。如何将它存储在指向数据的指针中?数据一直是正确的?如果我们将它指定给char指针,而不是像我们在for语句中所做的那样改变它,这对于常量数据来说应该是不可能的。
单独第一段+1。我会将其添加到我的曲目中。 –
+1不错的答案。应该注意的是,如果被引用或指向的*原始对象*本身*非const,那么在C++中简要提到的const-casting是唯一可行的。即声明一个'Object s',将它传递给一个函数,该函数采用'const Object&',该函数知道原始对象是非const的,可以对该引用进行const转换并坚果。如果它声明为“const Object s;'它将成为UB来在函数中强制转换引用。不能保证'std :: string :: data()'和/或'std :: string :: c_str()'的结果最初是非const-ilk的指针。因此,*坏主意*。 – WhozCraig