首頁 >後端開發 >C++ >可以使用同名建構函式參數來初始化 C 成員變數嗎?

可以使用同名建構函式參數來初始化 C 成員變數嗎?

Susan Sarandon
Susan Sarandon原創
2024-12-12 10:53:09775瀏覽

Can C   Member Variables Be Initialized Using Constructor Arguments with the Same Name?

使用同名建構子參數初始化成員變數

在 C 中,可以使用同名建構子參數來初始化成員變數作為成員變數。如下例所示,該技術已被證實在使用 g 4.4 和 clang 編譯時不會出現警告或錯誤。

class Blah {
    std::vector<int> vec;

public:
    Blah(std::vector<int> vec): vec(vec) {}

    void printVec() {
        for (unsigned int i = 0; i < vec.size(); i++)
            printf("%i ", vec.at(i));

        printf("\n");
    }
};

根據 C 標準 (§12.6.2/7),這個初始化是合法的並且保證可以工作。 mem-initializer 的表達式清單中的名稱在建構函數的範圍內進行計算,允許使用 this 指標來引用正在初始化的物件。

在上面的範例中,建構子參數vec被初始化為同名成員變數vec。每次建立 Blah 類別的物件時都會進行此初始化。

建議

考慮接受構造函數參數作為 const 引用,以避免不必要地複製原始向量對象,如下所示:

Blah(const std::vector<int> &amp; vec): vec(vec) {}

以上是可以使用同名建構函式參數來初始化 C 成員變數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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