2012-03-16 105 views
6

參照本網站http://www.cplusplus.com/reference/std/utility/make_pair/爲什麼std :: make_pair通過值而不是通過const引用獲取輸入?

性病:: make_pair有這個簽名(及可能的實現):

template <class T1,class T2> 
pair<T1,T2> make_pair (T1 x, T2 y) 
{ 
    return (pair<T1,T2>(x,y)); 
} 

我想知道爲什麼的std :: make_pair的值具有輸入參數,而不是常量參考?

這有什麼特別的理由嗎?

+0

有趣的是,http://www.sgi.com/tech/stl/pair.html make_pair通過值獲取參數,但標準將它們定義爲按值傳遞 – 2012-03-16 12:05:18

+0

它[在C++ 11中更好](http ://en.cppreference.com/w/cpp/utility/pair/make_pair)。你所有的擔憂都是暫時的,並且很快就無關緊要。 – 2012-03-16 12:15:43

+0

「如果對象類型可以隱式轉換,則可以從包含不同類型的其他對象中複製構建對象對象。」 – PermanentGuest 2012-03-16 12:22:40

回答

3

因此,std::make_pair("abc", 3)將工作。如果std::make_pair作爲參考,T1的推導類型將爲char const[4],這將產生各種奇怪的錯誤消息,因爲它不可複製。

相關問題