2016-04-22 171 views
4

我在成員函數中使用靜態矢量,並將值推回到該矢量中; ,但對於三個函數調用,矢量的大小僅爲1。靜態矢量的大小

我不知道如何爲MVCE做MVCE,因爲它對我來說也很好,所以問題顯然是代碼的其他部分。 我只是想知道或有一個想法,我的靜態向量會給我這樣的結果。

class X 
{ 
    //... 
}; 

template <typename T> 
void test(T a) 
{ 
    std::cout<<"Function called \n"; 
    static std::vector<X> vec; 
    std::lock_guard<std::mutex> lock(mx); 
    //Doing something else with T 
    X obj; 
    vec.push_back(obj); 
    std::cout<<"no of elements in vec is "<<vec.size()<<"\n"; 

} 

輸出未來是

Function called 
no of elements in vec is 1 
Function called 
no of elements in vec is 1 
Function called 
no of elements in vec is 1 

成員函數從CPPREST http_client請求呼叫調用。

+2

您是否用不同類型的'T'調用了'test()'3次? – songyuanyao

+0

是的。但是測試相同的類的實例。 – Hummingbird

+0

然後有3個不同的'test()'與'vec'的3個實例,這是不相關的。 – songyuanyao

回答

3

請注意,不同類型的模板實例是不相關的。這意味着如果您用不同的類型T三次調用test(),則將實例化三個不相關的test(),其中3個不同的實例爲vec。這就是爲什麼你得到的結果,他們的大小都是1

2

您的請求調用可能與此類似 int i = 1; float f = 2.5; char c ='A'; test(i); 測試(f); (c);

如果添加 test(i);

然後vec.size()測試(INT)將於2 雖然vec.size()測試(浮動)和測試(炭)將保持1

你可以閱讀更多有關的行爲在這裏模板中的靜態變量http://www.geeksforgeeks.org/templates-and-static-variables-in-c/

+0

是的,我明白了。感謝您的鏈接。 – Hummingbird