Ank*_*lla 3 c++ templates rvalue lvalue
我的问题很简单
#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)
}
Run Code Online (Sandbox Code Playgroud)
为什么我可以将左值传递给模板化函数f()
而不是非模板化函数g()
您的f()
函数不希望有右值,而是要有转发参考。
尽管f()
和g()
看起来非常相似(由于&&
符号),但它们却截然不同。
(例如,参见通用引用和转发引用之间是否有区别?)
如果您确实想传递i
给g()
,则有两种选择:
i
(然后视为右值)g(int{i})
std::move()
;则此后i
不得再使用原件。g(std::move(i))
归档时间: |
|
查看次数: |
71 次 |
最近记录: |