如何强制,价值成为左值参考?
How to force, value to be lvalue reference?
我希望我的函数采用 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
取一个左值引用?
首先,给定的代码在GCC and Clang, only in MSVC with non-standard extensions中默认不会编译。
如果您想确保 foo()
不接受右值,只需 delete
that overload:
template<class T>
void foo(T&& value) = delete;
我希望我的函数采用 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
取一个左值引用?
首先,给定的代码在GCC and Clang, only in MSVC with non-standard extensions中默认不会编译。
如果您想确保 foo()
不接受右值,只需 delete
that overload:
template<class T>
void foo(T&& value) = delete;