我變量創建過程中利用的存儲器分配的堆棧上的爲了改變const int的的值。這裏的程序:通過指針c更改常量值++
//compiled this using C++14 standard on cpp.sh and on MinGW32
#include <iostream>
using namespace std;
int main()
{
int c=5;
const int a(c);
cout<<(&c+1)<<endl<<&a<<endl; //Verifying if the addresses are the same
(*(&c+1))++;
cout<<a<<endl;
}
原來,我可以改變值的const變量。我是否進入未定義行爲的域名?還是允許?
我認爲程序以與正常方式相同的方式存儲const變量。當我嘗試直接訪問它時,編譯器會主動阻止我更改這些值。我的意思是說,編譯器區分const和非const變量,而不是堆棧本身(變量存儲在其上)。
如果我可以這樣做,如果我錯誤地指向const變量的位置,我將如何確保變量的一致性?
此外,作爲一個側面問題,同樣的程序是否也在其他語言中工作(當然,在對語法進行了必要的更改之後)?
注意:這與通過指針改變const值的其他問題有點不同。他們使用顯式轉換爲int *將指針轉換爲int *從const int *。
'&c + 1'不是一個有效的指針,所以你不能解除引用。 –
「我是否進入未定義行爲的域名?還是允許?」 - 你怎麼看?! –
至於這是否適用於其他語言,那麼您能否嘗試查看JavaScript和ML中會發生什麼? –