簡體   English   中英

在 class 定義中與在 class 實例化中分配 class 變量

[英]Assigning a class variable in class definition versus at class instantiation

與在 class 構造函數中定義 class 相比,分配 class 變量的后果是什么? class 定義中分配的變量是否可供所有 class 實例訪問?

實例化賦值示例:

class Foo
{
    private:
        int x;
        double y;

    public:
        Foo()
        {
            x = 0;
            y = 1.;
        }
};

class 定義中的賦值示例:

class Foo
{
    private:
        int x = 0;
        double y = 1.;

    public:
        Foo();
};

編輯:關於所有實例都可以訪問的 class 成員,我想我正在尋找static聲明的概念,我想我只是花括號語言的新手。

在此代碼段中

int x = 0;
double y = 1.;

沒有作業。 有初始化。

在此代碼段中

Foo()
{
    x = 0;
    y = 1.;
}

確實使用了賦值運算符。

一般來說,對於復雜類型的對象,它可能 1)不可能(默認構造函數或賦值運算符不可用)或 2)需要很多資源,因為首先調用默認構造函數來創建對象,然后調用賦值運營商。

最好至少定義構造函數,例如

    Foo() : x( 0 ), y( 1 )
    {
    }

使用 mem-initializer 列表。

class 定義中分配的變量是否可供所有 class 實例訪問?

不!

不同之處在於您默認初始化成員變量,然后在第一種情況下為它們分配值。 在第二種情況下,您對它們進行值初始化 - 這是首選。 第三個選項,也對它們進行值初始化,是使用成員初始化器列表:

class Foo
{
    private:
        int x;
        double y;

    public:
        Foo() : x{0}, y{1.}
        {
        }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM