【问题标题】:size of a static vector静态向量的大小
【发布时间】:2016-08-15 12:22:57
【问题描述】:

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

【问题讨论】:

  • 你用不同类型的Ttest()打了3次电话吗?
  • 是的。但是测试的类的实例是相同的。
  • 那么有 3 个不同的 test() 和 3 个不相关的 vec 实例。
  • 知道了.. 非常感谢。我不知道。我认为只有一个类实例,所以应该有一个向量。非常感谢。
  • @songyuanyao 您可以在答案中提及相同的内容,以便我可以接受它作为正确答案。谢谢。

标签: c++ templates vector


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    如果你添加 测试(一);

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

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

    【讨论】:

    • 是的,我现在明白了。感谢您的链接。
    猜你喜欢
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多