我感到困惑下面的代碼中的數據:返回爲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