2016-10-26 44 views
7

C++ 11'de std :: tie ile örtülü dönüşümlere izin var mı?std :: tie ile örtülü dönüşümlere izin var mı?

Aşağıdaki kod, derler ve çalışır, ancak sahnelerin arkasında neler olup bittiğini tam olarak bilmiyorum ya da güvenliyse. ne olur

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 

cevap

14

demetin hareket-atama operatörünün şablon sürümü kendi hareket-atama anlambilimini kullanarak bireysel tanımlama grubu üyeleri tek tek hareket-atar

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

kullanılır olduğunu. İlgili üyeler dolaysız olarak dönüştürülebilirse - örtük olarak dönüştürülür.

Bu zaten uzun süredir zevk oldum std::pair benzer işlevlere doğal bir uzantısı, temelde.

+0

belki de örtük dönüştürme nedeniyle 'UTypes argüman kesinti sırasında,' operatörü = 'gövdesi içinde yer alması söz için iyi bir fikirdir ...' örtük dönüşümler dikkate alınmaz. – TemplateRex