C 中的隱式物件建立:「建構」的棘手案例
C 中,使用記憶體複製(memcpy) 時的行為使用普通可複製類型可能會引發有關物件生命週期的問題。下面的程式碼片段說明了其中的歧義:
關鍵問題是以 T *b = static_cast 開頭的程式碼段是否建立了一個生命週期已開始的物件。 C 標準對此問題缺乏明確性,稱其為未指定。
N3751,一篇建議將 memcpy 識別為物件建構操作的論文,尚未被標準接受。目前的標準草案提到了透過定義、new 表達式或實現需求來建立對象,但沒有明確解決使用 memcpy 製作的副本。
提案 p0593 旨在透過引入隱式物件創建的概念來解決這種歧義用於低階記憶體操作。它建議 memcpy 和類似的操作在新分配的儲存中隱式建立物件。這將為所呈現的程式碼片段提供明確定義的行為。
但是,需要注意的是,p0593 尚未經過審查或接受。因此,memcpy 與普通可複製類型一起使用時的行為在 C 標準中仍未指定。
以上是memcpy 是否在 C 中隱式建構物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!