常量的哪个属性使其不可变?

sAc*_*re. 5 c c++

今天我接受了一次采访,其中一个问题对我来说非常棘手.采访者说"如何不断改变其价值?"

我回答"使用指针",我向他展示了一个例子:

int main( void )
{

        const int a = 3; 
        int *ptr;
        ptr = (int*)( &a );

        printf( "A=%d\n", a );
        *ptr = 5; 
        printf( "A=%d\n", a );


        return 0;
}
Run Code Online (Sandbox Code Playgroud)

但他说这很好.但告诉我哪个属性使得常数不变?他还说,有一个属性我们可以改变,并使其不断变化.

有没有这样的财产?它是如何工作的?

Mik*_*our 15

如果他说这很好,那么他就错了:尝试修改常量对象会产生不确定的行为.在实践中,可能会发生以下三种情况之一:

  • 常量变量的行为就像普通对象一样,你看到它的值变化;
  • 它存储在不可写入的内存中,程序因访问冲突而崩溃;
  • 它的每次使用都被替换为硬编码值,并且您看不到它的变化.

该语言没有定义const对象的任何运行时属性; 只是编译时检查,你不会意外修改它们.