[英]C++: Initialization of member variables
我對類成員變量初始化感到困惑。
假設我的.h文件是:
class Test {
int int_var_1;
float float_var_2;
public:
Test();
}
我的.cpp會是:
Test::Test() : int_var_1(100), float_var_2(1.5f) {}
現在,當我實例化一個類時,變量初始化為100和1.5。
但如果這就是我在構造函數中所做的一切,我可以在我的.cpp中執行以下操作:
int Test::int_var_1 = 100;
float Test::float_var_2 = 1.5f;
我對構造函數中的變量初始化或解析運算符之間的區別感到困惑。
這種使用范圍分辨率在構造函數外部初始化變量的方法是否僅適用於靜態變量,或者是否也可以對常規變量執行此操作?
你不能用一個代替另一個。 如果成員變量不是靜態的,則必須使用初始化列表(或構造函數體,但初始化列表更適合) * 。 如果成員變量是靜態的,那么必須使用第二個塊中的語法在定義中初始化它們。
* Als正確地指出,在C ++ 11中,您還可以在聲明中為非靜態成員變量提供初始值設定項:
class test {
int data = 5;
};
將data(5)
隱式添加到未明確提及data
任何初始化列表中(包括隱式定義的默認構造函數)
在初始化非靜態const
變量時(在構造函數中),應該使用第一種方法。 這是您可以修改這些類型的成員變量的唯一方法(除非您使用的是C ++ 11)。
可以使用適當的范圍解析運算符(類外)初始化靜態成員變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.