使用模板推导,std :: vector <int&>是否可行?

时间:2015-11-17 18:13:48

标签: c++ templates c++11 pass-by-reference

我正在学习C ++,现在继续参考崩溃的东西。 不过我现在有一个疑问:

template <typename T>
std::vector<T>& Foo(T) // value of parameter is unnecessary
{
    static std::vector<T> s_vec_T;
    return s_vec_T;
}

int main()
{
    int i = 0;
    auto get_vec = Foo(i); // suppose Foo() would be Foo<int&>(i)

    return 0;
}

最后,Foo() s_vec_T中的静态向量将被实例化为std::vector<int&>。 尽管如此,代码运行良好。为什么?我想,没有任何参考资料可以解决。

1 个答案:

答案 0 :(得分:3)

T将被推断为intiint,因此这将是推断的类型)所以没有问题那里。 std::vector无法保留引用,因此如果它以某种方式推断为int&,它甚至可能无法编译。