为什么我可以通过指针更改常量(const char *)的值?

0 c++ pointers constants

标题说明了一切。如何更改常数的值?这是否与更改常量数组的索引X处的元素的值相同?

    #include<iostream>
    int main(){
        const char* y = "original";
        auto *p = &y;
        *p = "modified";
        std::cout<<y<<"\n";
        //outputs modified
        system("pause");
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

son*_*yao 5

请注意,这y是一个非const指针(到const)。您不是在修改const零件,即const char指向的y,而是y本身;这是有效的。BTW y通过指针修改p

const char* y = "original";
y = "modified";  // this is well-formed
Run Code Online (Sandbox Code Playgroud)

另一方面,

*y = 'm';  // this is ill-formed
Run Code Online (Sandbox Code Playgroud)

如果执行y const,则可能会得到您期望的诊断。

const char* const y = "original";
y = "modified";  // ill-formed
*y = 'm';        // ill-formed
Run Code Online (Sandbox Code Playgroud)