warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]


在C++中,

char* p = "abc";  // valid in C, invalid in C++

會跳出警告:warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

改成下面會通過warning

char* p = (char*)"abc";  // OK

或者改成下面:

char const *p = "abc";  // OK

原因解析:

我們在學習c或者c++的時候都知道,如果在賦值操作的時候,等號兩邊的變量類型不一樣,那么編譯器會進行一種叫做 implicit conversion 的操作來使得變量可以被賦值。

 

在我們上面的表達式中就存在這樣的一個問題,等號右邊的"abc"是一個不變常量,在c++中叫做string literal,type是const char *,而p則是一個char指針。如果強行賦值會發生什么呢?沒錯,就是將右邊的常量強制類型轉換成一個指針,結果就是我們在修改一個const常量。編譯運行的結果會因編譯器和操作系統共同決定,有的編譯器會通過,有的會拋異常,就算過了也可能因為操作系統的敏感性而被殺掉。

像這種直接將string literal 賦值給指針的操作被開發者們認為是deprecated,只不過由於以前很多代碼都有這種習慣,為了兼容,就保留下來了。

 

轉:https://blog.csdn.net/VVVLeHr/article/details/86697346

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM