2016-10-26 141 views
7

在C++ 11中,是否允許使用std :: tie進行隱式轉換?std :: tie是否允許隱式轉換?

以下代碼編譯並運行,但我不確定幕後究竟發生了什麼,或者這是否安全。

std::tuple<float,float> foo() { return std::make_tuple(0,0); } 

double a, b; 
std::tie(a,b) = foo(); // a and b are doubles but foo() returns floats 

回答

14

會發生什麼是元組的舉動,賦值運算符的模板版本用於

template< class... UTypes > 
tuple& operator=(tuple<UTypes...>&& other); 

用自己的舉動,賦值語義這招,分配個人元組成員一個接一個。如果相應的成員可以隱式轉換 - 它們會被隱式轉換。

這基本上是std::pair中的類似功能的自然延伸,我們已經享受了很長一段時間。

+0

也許最好提一下,隱式轉換髮生在'operator ='主體內部,因爲在參數推導'UTypes ...'時,隱式轉換將被忽略。 – TemplateRex

相關問題