std :: tie是否允许隐式转换?

时间:2016-10-26 01:38:12

标签: c++ c++11 tuples stdtuple

在c ++ 11中,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

1 个答案:

答案 0 :(得分:14)

使用元组的移动赋值运算符的模板版本会发生什么

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

使用自己的移动赋值语义逐个移动 - 分配各个元组成员。如果相应的成员可以隐式转换 - 它们会被隐式转换。

这基本上是std::pair中类似功能的自然延伸,我们已经享受了很长时间。

相关问题