簡體   English   中英

Static class 成員未調用構造函數

[英]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 成員。

看這里

https://en.cppreference.com/w/cpp/language/static

暫無
暫無

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

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