如何将左值传递给函数,仅在没有模板的情况下获取右值
How to pass lvalue to function taking rvalue only without templates
我的问题很简单
#include <iostream>
using namespace std;
template <typename T>
void f(T&& i) {
cout << i << endl;
}
void g(int&& i) {
cout << i << endl;
}
int main() {
int i = 0;
f(i); // works fine
g(i); // candidate function not viable: no known conversion from 'int' to 'int &&'
// for 1st argument void g(int&& i)
}
为什么我可以将左值传递给模板化函数f()
而不是非模板化函数g()
您的f()
函数不需要右值,而是转发引用。
尽管f()
和g()
看起来非常相似(由于&&
符号(,但它们却非常不同。
(请参阅示例通用引用和转发引用之间有区别吗?
如果您真的想将i
传递给g()
,您有两种选择:
- 提供一个临时对象,它是
i
(然后被视为右值(g(int{i})
的副本 -
使用
std::move()
强制转换为右值引用;则以后不得使用原始i
。g(std::move(i))
(https://en.cppreference.com/w/cpp/utility/move(
R值引用是从c++ 11
开始定义的,你应该把你的编译器版本改成c++ 11。
请查看此链接
相关文章:
- 如何在没有实例的情况下获取非静态方法的类型?
- 如何在不等待检索的情况下获取C++中的内存位置?
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- 在不使用模板的情况下获取 std::array 引用
- 在确定有实现的情况下获取HTTP 501未实现
- 如何将左值传递给函数,仅在没有模板的情况下获取右值
- 如何在不创建实例的情况下获取类的方法成员的类型?
- 如何在不包含 Windows.h 的情况下获取 IsDebuggerPresent 的声明
- <int> 在不破坏堆栈的情况下获取 C++ 中的堆栈总和
- 如何在不引起实例化的情况下获取功能模板的签名
- 如何在不定义其他 fonction getValue() 的情况下获取私有值
- 如何在不获取所有html的情况下获取QTextEdit的html标签?
- 在不发送任何内容的情况下获取功能的返回
- LDAP函数中是否有任何功能可以在不使用ldap_search的情况下获取用户信息
- 如何在不使用QMediaPlayer的情况下获取Qt中音频和视频文件的持续时间
- 我可以在不声明变量类型的情况下获取输入,或者在 c++ 中为同一变量声明多个类型吗?
- 处理POSIX信号:如何在不使用BackTrace_symbols的情况下获取堆栈跟踪
- 在不知道的情况下获取地图的钥匙
- 在不暂停贪吃蛇游戏的情况下获取输入
- 修复错误:在不更改代码的情况下获取临时地址