日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發布時間:2024/4/18 c/c++ 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 warning: ISO C++ forbids converting a string constant to ‘char*‘ [-Wwrite-strings] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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


在C++11中有明確規定

char* p = "abc"; // valid in C, invalid in C++
1
如果你進行了這樣的賦值,那么編譯器就會跳出諸如標題的警告。但是如果你改成下面這樣就會通過warning

char* p = (char*)"abc"; //OK
1
或者這樣:

char const *p="abc";//OK
1
?這到底是怎么一回事呢?事實上,我們在學習c或者c++的時候都知道,如果在賦值操作的時候,等號兩邊的變量類型不一樣,那么編譯器會進行一種叫做 implicit conversion 的操作來使得變量可以被賦值。
?
?在我們上面的表達式中就存在這樣的一個問題,等號右邊的"abc"是一個不變常量,在c++中叫做string literal,type是const char *,而p則是一個char指針。如果強行賦值會發生什么呢?沒錯,就是將右邊的常量強制類型轉換成一個指針,結果就是我們在修改一個const常量。編譯運行的結果會因編譯器和操作系統共同決定,有的編譯器會通過,有的會拋異常,就算過了也可能因為操作系統的敏感性而被殺掉。
?
?像這種直接將string literal 賦值給指針的操作被開發者們認為是deprecated,只不過由于以前很多代碼都有這種習慣,為了兼容,就保留下來了。
?

總結

以上是生活随笔為你收集整理的warning: ISO C++ forbids converting a string constant to ‘char*‘ [-Wwrite-strings]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。