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 環境下當GCC版本比較高時,編譯代碼可能出現的問題ios

問題是這樣產生的,先看這個函數原型:函數

void someFunc(char *someStr);

再看這個函數調用:spa

someFunc("I'm a string!");

把這兩個東西組合起來,用最新的g++編譯一下就會獲得標題中的警告。code

爲何呢?原來char *背後的含義是:給我個字符串,我要修改它。blog

而理論上,咱們傳給函數的字面常量是無法被修改的字符串

因此說,比較和理的辦法是把參數類型修改成const char *原型

這個類型說背後的含義是:給我個字符串,我只要讀取它。string

 

如何同時接收const類型和非const類型?重載io

#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);
}

結果編譯

相關文章
相關標籤/搜索