问题描述
int solution(int&& a,int&& b);
int main() {
int a,b;
std::cin >> a >> b;
std::cout << solution(std::forward<int>(a),std::forward<int>(b)) << std::endl;
}
int solution(int&& a,int&& b) {
return a + b;
}
我是Java开发人员,开始从大学背景水平重新学习C ++,在任何类型之后我总是看到“ &&”,我了解到这是一个右值引用,然后我了解了move构造函数等。。。我只是不太清楚std :: forward在幕后的作用是什么?它是否确实提供了右值引用,所以没有创建参数副本?如果是正确的话,为什么比只写const int&更好呢?(我也不在这里复制任何东西... 这个问题可能很愚蠢,但请先谢谢。
解决方法
它确实提供了右值引用,因此没有创建参数副本吗?
是的
如果那是对的,那为什么比只写const int&更好呢?(我也不在这里复制任何内容。
不是。
实际上,对于简单的int
,您甚至都不应该通过引用传递。它们足够小,因此最好使用简单的传递副本(奇怪的是,也许更容易优化)。
右值引用对于实现移动语义(具有可传递的间接资源的类)和完美转发非常有用,而不是简单的非可变函数参数。
您的示例与完美转发无关;只是传递了对函数的引用。
我总是在任何类型后面看到“ &&”
您不应该总是“看到”它。