【发布时间】:2020-11-05 21:21:55
【问题描述】:
好吧,伙计们,我有一个简单的问题,我不明白
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++,我总是在 any 类型后面看到“&&”,我了解到这是一个右值引用,然后我了解了 move构造函数等...我只是不清楚 std::forward 在场景之外做了什么?它真的给出了右值引用,所以没有创建参数的副本吗?如果这是正确的,为什么它比只写 const int& 更好?(我也不在这里复制任何东西...... 这个问题可能很愚蠢,但提前谢谢)
【问题讨论】:
-
你读过en.cppreference.com/w/cpp/utility/forward吗?
std::forward仅与 forwarding references 一起使用 — 大致表示函数参数T&&其中T是函数模板的类型参数。 -
完美转发是带模板函数和
&&参数。在非模板函数&&中,参数绑定到右值参数。 (曾经使用过通用参考这个词,但它通常已经失宠了。) -
谢谢你们,我想我需要更多关于完美转发的阅读......
标签: c++ reference rvalue perfect-forwarding