簡體   English   中英

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& 更好?(我也不在這里復制任何東西......這個問題可能很愚蠢,但提前致謝)

它真的給出了右值引用,所以沒有創建參數的副本嗎?

是的。

如果這是對的,為什么比只寫 const int& 更好?(我也不在這里復制任何內容。

不是。

事實上,對於一個簡單的int ,你甚至不應該通過引用傳遞。 它們足夠小,因此最好使用簡單的傳遞副本(而且,奇怪的是,也許更容易優化)。

右值引用對於實現移動語義(具有可以傳輸的間接資源的類)和完美轉發非常有用,而不是用於簡單的非變異函數參數。

您的示例與完美轉發無關; 它只是傳遞對函數的引用。

我總是在任何類型之后看到“&&”

你不應該“總是”看到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM