C++ 完美转发 vs const 引用

C++ Perfect forwarding vs const reference

好的伙计们,我有一个简单的问题我不明白

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 类型后面看到“&&”,我了解到这是一个右值引用,然后我已经了解了移动构造函数等......我只是不清楚 std::forward 在场景之外做了什么?它真的给出了右值引用所以没有创建参数副本吗?如果那是对的,为什么它比只写 const int& 更好?(我也没有在这里复制任何东西...... 这个问题可能很愚蠢,但在此先感谢)

Does it really give the rvalue reference so no copy of argument is created?

是的。

If that is right why is it better than writing just const int&?(I do not copy anything here either.

不是。

事实上,对于一个简单的 int,您甚至不应该通过引用传递。它们足够小,一个漂亮的简单 pass-by-copy 更可取(奇怪的是,也许更容易优化)。

右值引用可用于实现移动语义(类 具有可以传输的间接资源)和完美转发,而不是简单的 non-mutating 函数参数。

你的例子与完美转发无关;它只是传递对函数的引用。

I always see "&&" after the any type

你不应该“总是”看到它。