这是我的书上说的:
char *p="Hello"; //pointer is variable, string is constant
*p='M'; // error
p="bye"; // works
好吧,在 C 中我的第二行没有给我任何错误,在 C++ 中也没有。
我在 Windows 7 上使用 Turbo C++。如果我在 gcc 或其他程序中尝试,那么上面的事情是否成立。
同样在类似的行上,如果上面的代码被书中正确解释,
#include<iostream.h>
void display(char*);
void display(const char*);
void main()
{
char* ch1="hello";
const char *ch2="bye";
display(ch1);
display(ch2);
}
void display(char* p)
{
cout << p << endl;
}
void display(const char* p)
{
cout << p << endl;
}
现在我的书是否认为 char*
和 const char*
相同,因为如果是这样,那么上面的代码将不起作用,因为参数将相同?
(虽然我在 turbo +windows 上得到了输出 Hello bye。)
哪个是正确的?
最佳答案
语言规范不是编译器对你的 promise ,而是你和编译器双方签署的相互契约。 (当然是比喻。显然这不是字面意义上的具有法律约束力的契约(Contract)。)如果您通过编写 *p='M';
违反了契约(Contract),那么您已经触发了“未定义行为”,并且你不能指望编译器有任何特定的行为:也许它会很严格并给你一个编译错误,也许它只会在运行时变得不稳定。 . .你没有遵守协议(protocol),它现在可以为所欲为。另请参阅:http://catb.org/jargon/html/N/nasal-demons.html .
关于c++ - 常量 char* 与 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8102397/