std::tie允许隐式转换吗?

8
在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个回答

15

发生的情况是使用了元组的移动赋值运算符的模板版本

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

使用其自身的移动赋值语义逐个移动赋值元组成员。如果相应的成员是隐式可转换的,则它们将被隐式转换。

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


也许提到隐式转换发生在operator=的函数体内会是个好主意,因为在UTypes...的参数推导过程中,隐式转换会被忽略。 - TemplateRex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接