в приведенном ниже фрагменте кода, когда я передаю литеральную строку функции, она выдает мне предупреждение ISO C++ forbids converting a string constant to 'char*
, но когда я назначаю символьный массив этому литералу, предупреждение исчезает. Я знаю, что тип строковых литералов в C ++ является константным символьным массивом, но тип переменной ch
является просто char
. (Не constant char
)
#include <iostream>
using namespace std;
void func(char s[])
{
cout << s;
}
int main() {
char ch[] = "what";
func(ch);
func("what"); //gives warning
return 0;
}
и у меня есть еще один вопрос. когда я добавляю const
к типу входного параметра функции func
, в этой ситуации также нет предупреждения, даже если я передаю массив символов в функцию, а не в массив константных символов. Я думал, что это должно вызвать предупреждение для вызова fucn(ch)
потому что ch
это массив символов, а не константный массив символов.
#include <iostream>
using namespace std;
void func(const char s[])
{
cout << s;
}
int main() {
char ch[] = "what";
func(ch);
func("what");
return 0;
}