【发布时间】:2020-06-24 20:22:42
【问题描述】:
我希望我的函数采用 lvalue 引用,绝对不是 rvalue 或 temporary 或其他。
这是我的功能:
template<class T>
void foo(T& value) {}
// Imagine I have a class Foo
struct Foo
{
int a;
int b;
};
当我调用foo(Foo{1, 2}) 时,首先,即使我要求lvalue 引用,它也会编译,其次,它不起作用,因为foo 存储了传递值的地址,所以我以后读的时候就垃圾了。
如何强制foo 获取左值引用?
【问题讨论】:
-
使用您给定的代码 sn-ps
foo(Foo(1, 2))无法编译。 -
你用的是什么编译器? VS2019 发出
warning C4239: nonstandard extension used: 'argument': conversion from 'Foo' to 'T &'或error C2664: 'void foo<Foo>(T &)': cannot convert argument 1 from 'Foo' to 'T &',具体取决于语言扩展是启用还是禁用。 -
那根本行不通:见on coliru
标签: c++ c++11 templates lvalue function-templates