首頁 >後端開發 >C++ >「memcpy」是在 C 中建構可簡單複製物件的有效方法嗎?

「memcpy」是在 C 中建構可簡單複製物件的有效方法嗎?

Patricia Arquette
Patricia Arquette原創
2024-11-09 17:39:02965瀏覽

Is

使用「memcpy」建構普通可複製物件時的擔憂

在C 語言中,使用「memcpy」建構普通可複製對象的有效性可複製類型一直是爭論的話題。本文探討了圍繞此程式碼的細微差別和不確定性:

#include <cstdlib>
#include <cstring>

struct T   // trivially copyable type
{
    int x, y;
};

int main()
{
    void *buf = std::malloc( sizeof(T) );
    if ( !buf ) return 0;

    T a{};
    std::memcpy(buf, &amp;a, sizeof a);
    T *b = static_cast<T *>(buf);

    b->x = b->y;

    free(buf);
}

Uncertain Object Lifetime with "memcpy""

問題的關鍵在於確定是否「 *b" 表示一個生命週期已經啟動的對象,如果是,則表示該生命週期何時開始。C標準對此事保持沉默。 p0593,提倡在低階物件操作操作(例如「malloc」和「memcpy」)期間隱式物件建立。

C 14 標準草案的指南

根據C 14 標準草案第1.8 節[intro.object] ,物件主要是透過定義、new 表達式或某些實現過程創建的,與普通可複製類型相關的第3.9 節[basic.types] 指定允許複製此類物件的位元組,前提是適當地恢復這些值。郵件清單」促進了對此主題的熱烈討論,重點是透過類型雙關來避免複製。

結論

使用「memcpy」「構造」普通可複製物件的問題在C 標準中仍未解決,為潛在的未定義行為留下了空間。中的低階物件操作帶來更大的確定性。

以上是「memcpy」是在 C 中建構可簡單複製物件的有效方法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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