静态向量的大小

size of a static vector

本文关键字:向量 静态      更新时间:2023-10-16

>我在成员函数中使用静态向量并将值推回该向量;但是对于三个函数调用,向量的大小仅为 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请求调用调用。

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

您的请求调用可能与此类似 整数 i = 1; 浮点数 f = 2.5; 字符 c = 'A'; 测试(i); 测试(f); 测试(c);

如果添加 测试(i);

那么 test(int) 的 vec.size() 将为 2而 test(float) 和 test(char) 的 vec.size() 将保持 1。

您可以在此处阅读有关模板中静态变量行为的更多信息 http://www.geeksforgeeks.org/templates-and-static-variables-in-c/