C++ 11 私有成員變量就地初始化

在C++11之前,對於類中的非靜態成員變量,不能在類中進行初始化,它們的初始化操作只能通過構造函數來進行,示例如下:

class Foo
{
    private:
        int a = 1;     //編譯錯誤
    public:
        Foo() {}
};

上面的程序中,變量a進行了就地初始化,這在C++98中是不允許的,因此會導致編譯錯誤。但是這種情況在C++11中得到了改變,即C++11中允許類中的非靜態成員變量進行就地初始化,看下面的例子:

class Foo
{
    private:
        int a = 1;
        double b {12.35};   //C++11中的一種新的初始化方式
    public:
        Foo() {}
        Foo(int i):a(i) {}   
        Foo(int i,double j):a(i),b(j) {}
};

上面的程序僅在C++11中編譯通過,程序中變量a,b都通過就地初始化的方式進行了初始化,之後的可以根據具體的需要選擇合適的構造函數,這樣就避免了每次都要在構造函數的初始化列表中寫上每個非靜態成員變量了.
注意:對於靜態成員變量,C++11和C++98保持了一致,即允許常量的整型或枚舉型靜態成員變量進行就地初始化,而對於非常量的靜態成員,只能夠在類外進行初始化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章