c++ - 用模板推导,std::vector<int&>可行吗?

标签 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()中的静态 vector s_vec_T将被实例化为 std::vector<int&> . 尽管如此,代码运行良好。为什么?我想没有任何引用崩溃需要处理。

最佳答案

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

关于c++ - 用模板推导,std::vector<int&>可行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33764146/

相关文章:

c++ - 为什么 Google 测试在一台机器上通过但在另一台机器上失败?

c++ - 使用 cygwin : can't find configure file 安装 C++ boost

c++ - 模板并不总是猜测初始化列表类型

wpf - DataGridCell.Template 样式覆盖 IsSelected 触发器

html - 如何在golang模板中使用对象数组?

c++ - 使用右值引用重载模板化可变参数运算符

c++ - vector 中嵌套 vector 的分段故障核心转储

c++ - 在 C++ 中修改 "Const Char Pointers"

c++ - 为什么在离开作用域时指向字符串文字的外部指针会丢失? (C++)

c++ - c++11 和 MPI 库的兼容性