我需要做的是,CDS型T.C++模板交換功能
兩個參數的交換功能,以下是我的代碼,但一定出事了。
有人可以更好我的代碼嗎?
template<typename T>
void swap (T& a, T& b)
{ T temp = a;
a = b;
b = temp;
}
我應該將它作爲常量引用傳遞嗎?但我正在改變價值觀?
請讓我知道謝謝!
我需要做的是,CDS型T.C++模板交換功能
兩個參數的交換功能,以下是我的代碼,但一定出事了。
有人可以更好我的代碼嗎?
template<typename T>
void swap (T& a, T& b)
{ T temp = a;
a = b;
b = temp;
}
我應該將它作爲常量引用傳遞嗎?但我正在改變價值觀?
請讓我知道謝謝!
如果你的編譯器支持的話,你應該通過一個右值引用傳遞的參數和使用std::move
轉換爲右值:
template <class T>
void swap(T&&, T&&);
int main()
{
int n(0);
swap(std::move(n), 5); // n is now 5
}
在你的代碼,這將是不可能,因爲左值不能綁定到右值。但是這個小功能忽略了你的代碼很好。
您可能遇到的問題是您的交換功能的命名。嘗試命名它mySwap,而不是。我曾經有過同樣的問題。交換功能是在C++中預定義的;
使用STL提供的標準交換。
爲什麼人們把它標記下來? – 2016-06-05 20:38:16
它的方式很好,儘管你應該使用'std :: swap'。 – 0x499602D2 2013-04-26 01:19:13
你有什麼問題?據我所見,它看起來是正確的。 – 2013-04-26 01:19:55
如果你通過const引用傳遞它不能被修改,編譯器會懲罰你。 – 2013-04-26 01:22:46