代码审查:const char *修改

时间:2017-02-06 12:40:10

标签: c++ g++ const

我刚刚编写了以下代码,并且正在使用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;
}

因为很明显cstrconst所以它在行cstr = "CPP";中的修改不应该起作用,但它正在发挥作用。为什么呢?

4 个答案:

答案 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/