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
函数的输入参数类型时,即使我将字符数组传递给函数而不是const字符数组,在这种情况下也没有警告。我认为这应该引起警告之所以调用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;
}
答案 0 :(得分:0)
const
与精确匹配无关,而是函数对参数的作用。
如果您使用参数const
定义函数,则函数承诺不会更改传递的变量。因此,您可以使用常量字符串以及(可变)非常量变量来调用它。如果您尝试修改函数中的值(因为您答应了,则不会),编译器会警告您。
如果您使用非恒定参数定义函数,则它可以更改参数。因此,如果您传递常量字符串,编译器会警告您,因为这将导致未定义的行为/崩溃。