這個問題在這里已經有了答案: 我可以通過placement-new 覆寫一個const 物件嗎? (2 個回答) 1 小時前關閉。
根據標準,以下代碼是否合法?
#include <new>
int main() {
const int x = 3;
new ((void *)&x) int { 15 };
}
在我看來,只要沒有使用對它的參考x就應該是有效的。
根據 c 標準 basic.life 8:
指向原始物件的指標,指向原始物件的參考 [...]
- 原始物件的型別不是 const 限定的,并且,如果是型別別,則不包含任何型別為 const 限定或參考型別的非靜態資料成員
PS:如果答案可以包含對標準的參考,將不勝感激
uj5u.com熱心網友回復:
根據標準,以下代碼是否合法?
程式的行為未定義:
[基本.生活]
在具有靜態、執行緒或自動存盤持續時間的 const 完整物件占用的存盤空間內,或在此類 const 物件在其生命周期結束之前曾經占用的存盤空間內創建新物件,會導致未定義的行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/472987.html
