[英]Static class member not calling constructor
#include <iostream>
class Temp {
public:
static Temp temp;
Temp() { std::cout << "hi!"; }
};
int main() {}
令人驚訝的是,沒有打印“hi”。 我檢查了組件,它省略了temp
的構造。
確保正確調用 static class 成員的構造函數的條件是什么?
附加問題:
為什么模板化 class 的行為不同?
#include <iostream>
template <typename T>
class Temp {
public:
static Temp temp;
Temp() { std::cout << "hi!"; }
};
int main() { Temp<int> i; }
它正確顯示“嗨”。
因為沒有 class 的實例,所以不會打印“Hi”。
int main()
{
Temp temp;
}
它會起作用的。 (模板與它無關)
令人驚訝的是,沒有打印“hi”。 我檢查了組件,它省略了 temp 的構造。
構造函數沒有被調用,因為沒有正在構造的對象。
正確顯示“嗨”
因為構造了 object,所以調用了構造函數。
確保正確調用 class 成員的 static 的 ctor 的條件是什么
static 成員無法構造但已初始化。 static 成員(僅成員,而不是 class 所屬的 object)甚至在進入 main() ZC1C11AB5268E68A94 之前就存在。 在您的 class 中,您只聲明了一個 static 成員,但尚未定義它。
您將需要定義和初始化 static 成員。
看這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.