2016-10-26 138 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

相关问题