【发布时间】:2013-04-12 11:27:54
【问题描述】:
我认为c++ 中的字符串文字是const char* 的类型。而且您不能将const char* 对象分配给non-constant char* 对象。但在 Visual Studio 2010 中。以下代码可以编译而不会出现错误或警告,但会产生运行时错误。
int main(void)
{
char *str2 = "this is good";
str2[0] = 'T';
cout << str2;
getchar();
return 0;
}
而如果我们不修改字符串的值,读取值是可以的:
for(char *cp = str2; *cp !=0; ++cp) {
printf("char is %c\n", *cp);
}
getch();
return 0;
那么为什么我们可以在这里将一个 const char* 分配给一个 char* 呢?
【问题讨论】:
-
@unkulunkulu 答案在 C++ 中有点不同:根据 [lex.string],它是 C++ 中的 const char 数组
-
@DyP,链接问题的答案涵盖 C++
-
@unkulunkulu 哦,对不起,你是对的。尽管如此,上面的代码在 C++ 中是 invalid 的,请参阅 [diff.lex]
-
@DyP,抱歉我的无知,但是 [diff.lex] 是什么:D
-
@DyP - VC2010 不太可能完全遵循 C++11 标准。 :-) 该部分是语言修订的一部分,并且更早允许转换(因为 C 没有 const 的时候)。
标签: c++ visual-c++