提供的程式碼示範了在 Func 函數中修改內建類型整數 num 的意外行為,甚至儘管它是使用 std::move 作為右值引用傳遞的。這種行為與 std::move 轉移所有權和資源的普遍理解相矛盾。
移動語意是指將所有權和資源從一個物件轉移到另一個物件。在這種情況下,資源是屬於物件的資料值或分配的記憶體。
內建類型,例如整數,本身代表它們的資源抓住。因此,轉讓其資源的所有權沒有什麼意義。相反,它們只是傳遞對物件的引用,允許修改反映在原始物件中。
std::move 其實並不會移動物件。其目的是將左值引用(對已定義位置的物件的引用)轉換為 x 值參考(對已過期物件的參考)。此轉換允許引用綁定到接收函數內的右值引用。
在內建類型物件上呼叫 std::move 後,引用傳遞函數仍然引用原始物件。對物件所做的任何修改都會反映在原始物件中。
與可以定義自訂行動語義的使用者定義類型不同,內建類型沒有此類行為。 std::move 不會呼叫內建類型的任何移動建構函式或賦值運算子。相反,它只是將它們轉換為右值引用以用於綁定目的。此行為由 C 標準明確定義,並解釋了給定程式碼範例中 num 的意外修改。
以上是為什麼內建類型不表現出移動語義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!