warning:deprecated conversion from string constant to 'char *' 解决方案
#include <iostream>
using namespace std;
int fuc(char *a)
{
? ? cout << a << endl;
}
int main()
{
? ? fuc("hello");
}
Linux?環(huán)境下當(dāng)GCC版本比較高時,編譯代碼可能出現(xiàn)的問題
問題是這樣產(chǎn)生的,先看這個函數(shù)原型:
| 1 | void?someFunc(char?*someStr); |
再看這個函數(shù)調(diào)用:
| 1 | someFunc("I'm a string!"); |
把這兩個東西組合起來,用最新的g++編譯一下就會得到標(biāo)題中的警告。
為什么呢?原來char *背后的含義是:給我個字符串,我要修改它。
而理論上,我們傳給函數(shù)的字面常量是沒法被修改的。
所以說,比較和理的辦法是把參數(shù)類型修改為const char *。
這個類型說背后的含義是:給我個字符串,我只要讀取它。
?
如何同時接收const類型和非const類型?重載
#include <iostream>
using?namespace?std;
?
int?fuc(char?*a)
{
????cout << a << endl;
}
int?fuc(const?char?*a)
{
????cout << a << endl;
}
int?main()
{
????char?a[] =?"hello 123";
????fuc(a);
????const?char?b[] =?"hello 123";
????fuc(b);
}
?
總結(jié)
以上是生活随笔為你收集整理的warning:deprecated conversion from string constant to 'char *' 解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IO模式设置,阻塞与非阻塞的比较,rec
- 下一篇: CentOS7 正确安装mysql(亲测