首頁  >  文章  >  後端開發  >  為什麼透過非常量指標修改常數會產生未定義的行為?

為什麼透過非常量指標修改常數會產生未定義的行為?

Linda Hamilton
Linda Hamilton原創
2024-10-29 05:31:02816瀏覽

Why Does Modifying a Constant through a Non-const Pointer Produce Undefined Behavior?

透過非常量指標修改常數:深入研究未定義的行為

在提供的程式碼片段中,您表達了對該行為的困惑透過非常量指標(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 指向的值(cout w
  • 然而,顯示 e (*cout

您進一步注意到w 指向的位址與e 的位址相同(cout cout w 進行了修改,e 仍然保持不變。

此行為源自於透過非修改常數時所出現的未定義行為。 -常量指針。一旦進行此類修改,程式碼就會進入未定義的行為區域,該區域變得不可預測並取決於特定的實作細節。

在這種情況下,透過w 進行的修改似乎會影響e 在運行時的臨時副本,而原始e 保持不變。原因是 e 被視為編譯時常數,並且其值被硬編碼到二進位程式碼中。因此,對 w 的任何運行時修改都不會影響原始 e

此行為特定於所使用的實現,不應依賴。透過非常量指標修改常數資料被認為是一種不好的做法,應該避免。正確的方法是使用非常量引用或建立要修改的資料的非常量副本。

以上是為什麼透過非常量指標修改常數會產生未定義的行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn