我刚刚编写了以下代码,并且正在使用g++
。它应该不起作用。它为什么有效?
#include <iostream>
using namespace std;
int main()
{
//char const *cstr;
const char *cstr;
char *cptr;
std::cin>>cptr;
cstr = cptr;
cstr = "CPP";
cout<<cstr;
return 0;
}
因为很明显cstr
是const
所以它在行cstr = "CPP";
中的修改不应该起作用,但它正在发挥作用。为什么呢?
答案 0 :(得分:4)
cstr
是一个指向常量的非常量指针。它可以分配给并重新分配。
指向常量的常量指针是char const* const cstr
。
答案 1 :(得分:0)
此代码导致未定义的行为(如果cin
上有任何输入):
std::cin>>cptr;
该代码的含义是从cin
读取字符并将其写入cptr
指向的空间。但是你没有初始化cptr
。
当某个程序有undefined behaviour时,可能会发生任何事情,包括&#34;按预期工作&#34;。
答案 2 :(得分:0)
const char *cstr;
因为很明显
cstr
是const
不,不是。
它不是const
,但它所指的是const
。
此外,您正在尝试读入不存在的char
缓冲区。
停止使用C字符串,改为使用一些闪亮的std::string
。
答案 3 :(得分:0)
对于那些在使用const声明的指针时遇到困惑的人,请使用http://cdecl.org/。