在C++中,完美轉發是一種技術,它允許我們將函數參數以原始形式(保持參數的類型和值類別)傳遞給另一個函數
以下是一個簡單的完美轉發示例:
#include <iostream>
#include <utility>
void func(int& x) {
std::cout << "左值引用: "<< x << std::endl;
}
void func(int&& x) {
std::cout << "右值引用: "<< x << std::endl;
}
template<typename T>
void wrapper(T&& arg) {
// 使用std::forward完美轉發參數給func
func(std::forward<T>(arg));
}
int main() {
int x = 42;
wrapper(x); // 輸出 "左值引用: 42"
wrapper(42); // 輸出 "右值引用: 42"
}
在這個示例中,我們定義了兩個重載的func
函數,一個接受左值引用,另一個接受右值引用。然后,我們創建了一個名為wrapper
的模板函數,它接受一個通用引用參數T&& arg
。在wrapper
函數內部,我們使用std::forward
將參數完美轉發給func
函數。
當我們在main
函數中調用wrapper
時,我們可以看到參數被正確地轉發給了相應的func
重載版本。這就是C++完美轉發的基本實現。