用模板推导,std::vector<int&>可行吗?
With template deduction, std::vector<int&> is feasible?
我正在学习 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&>
。
尽管如此,代码运行良好。为什么?我想没有任何引用崩溃需要处理。
T
将被推断为 int
(i
是 int
,因此这就是将被推断的类型)所以那里没有问题。 std::vector
无法保存引用,因此如果它以某种方式将其推断为 int&
,它甚至可能无法编译。
我正在学习 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&>
。
尽管如此,代码运行良好。为什么?我想没有任何引用崩溃需要处理。
T
将被推断为 int
(i
是 int
,因此这就是将被推断的类型)所以那里没有问题。 std::vector
无法保存引用,因此如果它以某种方式将其推断为 int&
,它甚至可能无法编译。