2013-04-26 118 views
0

我需要做的是,CDS型T.C++模板交換功能

兩個參數的交換功能,以下是我的代碼,但一定出事了。

有人可以更好我的代碼嗎?

template<typename T> 
void swap (T& a, T& b) 
{ T temp = a; 
    a = b; 
    b = temp; 
} 

我應該將它作爲常量引用傳遞嗎?但我正在改變價值觀?

請讓我知道謝謝!

+4

它的方式很好,儘管你應該使用'std :: swap'。 – 0x499602D2 2013-04-26 01:19:13

+1

你有什麼問題?據我所見,它看起來是正確的。 – 2013-04-26 01:19:55

+0

如果你通過const引用傳遞它不能被修改,編譯器會懲罰你。 – 2013-04-26 01:22:46

回答

0

如果你的編譯器支持的話,你應該通過一個右值引用傳遞的參數和使用std::move轉換爲右值:

template <class T> 
void swap(T&&, T&&); 

int main() 
{ 
    int n(0); 

    swap(std::move(n), 5); // n is now 5 
} 

在你的代碼,這將是不可能,因爲左值不能綁定到右值。但是這個小功能忽略了你的代碼很好。

0

您可能遇到的問題是您的交換功能的命名。嘗試命名它mySwap,而不是。我曾經有過同樣的問題。交換功能是在C++中預定義的;

-2

使用STL提供的標準交換。

+0

爲什麼人們把它標記下來? – 2016-06-05 20:38:16