透過非常量指標修改常數:深入研究未定義的行為
在提供的程式碼片段中,您表達了對該行為的困惑透過非常量指標(w) 修改常數整數(e):
<code class="cpp">const int e = 2; int* w = (int*) &e; // Casting to remove const-ness *w = 5; // Modifying the value pointed to by w</code>
進行此修改後,您會觀察到:
您進一步注意到w 指向的位址與e 的位址相同(cout cout w 進行了修改,e 仍然保持不變。
此行為源自於透過非修改常數時所出現的未定義行為。 -常量指針。一旦進行此類修改,程式碼就會進入未定義的行為區域,該區域變得不可預測並取決於特定的實作細節。
在這種情況下,透過w 進行的修改似乎會影響e 在運行時的臨時副本,而原始e 保持不變。原因是 e 被視為編譯時常數,並且其值被硬編碼到二進位程式碼中。因此,對 w 的任何運行時修改都不會影響原始 e。
此行為特定於所使用的實現,不應依賴。透過非常量指標修改常數資料被認為是一種不好的做法,應該避免。正確的方法是使用非常量引用或建立要修改的資料的非常量副本。
以上是為什麼透過非常量指標修改常數會產生未定義的行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!