所以编译器告诉我这是从字符串文字到 char* 的弃用转换:
char* myString = "i like declaring strings like this";
我应该担心这个吗?这是错误的方法吗?
我需要传递myString
给一个接受 a 的函数,如果没有此转换char*
,我应该正确初始化谁?char*
所以编译器告诉我这是从字符串文字到 char* 的弃用转换:
char* myString = "i like declaring strings like this";
我应该担心这个吗?这是错误的方法吗?
我需要传递myString
给一个接受 a 的函数,如果没有此转换char*
,我应该正确初始化谁?char*
是的,你应该担心它!
您应该将其声明为:
const char* myString = "i like declaring strings like this";
mystring
是指向字符串文字的指针"i like declaring strings like this"
,并且字符串文字驻留在内存空间(实现定义)中,您的程序不应修改该空间。
修改字符串文字会导致未定义的行为。
因此,C++03 标准不推荐在没有关键字的情况下声明字符串文字const
,这确保了字符串文字不能通过指针修改。
@Benjamin 已经在评论中发布了对您的问题编辑的回答,只是引用了他的回答:
使用数组:
char myString[] = "我喜欢这样声明字符串";
将文字复制到数组中,并且可以修改副本
它甚至不应该编译。如果您需要将它传递给您确定不会更改您需要使用 const cast 的字符串的函数,它的正确用途之一是:
functionName(const_cast<char *>("something"));
或者,如果您不想要 const 强制转换,您可以将字符串复制到堆栈:
char str[] = "something";
functionName(str);