静态向量的大小

时间:2016-04-22 03:16:04

标签: c++ templates vector

我在成员函数中使用静态向量并将值推回到该向量中; 但是对于三个函数调用,向量的大小只有1。

我不知道如何制作MVCE,因为在MVCE中它也适合我,所以问题显然是代码的其他部分。 我只想知道或了解我的静态向量在哪种情况下会给我这样的结果。

Asynctask.cancel(true)

输出结果是

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";

}

从CPPREST http_client请求调用中调用成员函数。

2 个答案:

答案 0 :(得分:3)

请注意,具有不同类型的模板实例化无关紧要。这意味着如果您使用不同类型test()三次调用T,则将实例化三个不相关的test(),其中包含3个不同的vec实例。这就是为什么你得到的结果是它们的大小都是1

答案 1 :(得分:2)

您的请求呼叫可能与此类似     int i = 1;     float f = 2.5;     char c ='A';     试验(ⅰ);     试验(F);     试验(c)中;

如果你添加     试验(ⅰ);

然后test(int)的vec.size()将为2 虽然test(float)和test(char)的vec.size()将保持为1。

您可以在http://www.geeksforgeeks.org/templates-and-static-variables-in-c/

中详细了解模板中静态变量的行为