#include <tuple>
int main()
{
int xa = 1;
int ya = 2;
auto const& [xb, yb] = std::tuple<int&, int&>(xa, ya);
xb = 9; // Shouldn't this be read-only?
return xa + ya;
}
这不仅可以编译,还可以返回11.
所以有两个问题:
为什么在指定为自动const&amp;?时允许写入xb?难道这不能编译吗?
为什么我不能取代“auto const&amp;”与“汽车&amp;”并编译? Clang(6.0)和g ++(7.3)都抱怨错误消息,例如“类型&lt; ...&gt;的非常量左值引用无法绑定到类型元组的临时值&lt; ...&gt;”
谢谢!
答案 0 :(得分:8)
您正在获取对int的非const引用元组的const引用。然后,您将该元组分解为两个非const引用。要使int引用为const,需要使int引用为const:
auto const& [xb, yb] = std::tuple<const int&, const int&>(xa, ya);
您正在创建的元组是一个未命名的临时元素,因此您无法将非const引用绑定到它,即使该引用本身未命名。