Joj*_*ino 3 c++ templates lvalue function-templates c++11
我希望我的函数采用左值引用,而绝对不是右值或临时值或其他任何值。
这是我的功能:
template<class T>
void foo(T& value) {}
// Imagine I have a class Foo
struct Foo
{
int a;
int b;
};
Run Code Online (Sandbox Code Playgroud)
当我调用 时foo(Foo{1, 2})
,首先,即使我要求左值引用,它也会编译,其次,它不起作用,因为foo
存储了传递值的地址,所以我稍后阅读时会得到垃圾。
如何强制foo
采用左值引用?
首先,给定的代码默认不会在GCC 和 Clang 中编译,只能在具有非标准扩展名的 MSVC 中编译。
如果您想确保foo()
不接受右值,只需delete
重载:
template<class T>
void foo(T&& value) = delete;
Run Code Online (Sandbox Code Playgroud)