C++ 获取对元组元素的引用

C++ 获取对元组元素的引用,c++,reference,stl,tuples,C++,Reference,Stl,Tuples,假设我有一个包含类型a、B和C的元组: std::tuple<A,B,C> t; std::元组t; 如何提取对其中一个元素的引用(可变引用),以便修改它 std::get返回一个副本。与您在OP中所说的相反,std::get返回一个引用。事实上,它甚至有一个用于元组&&的重载,返回一个T&。你的误解可能源于这样一个事实,即你在一个表达式中使用它,导致了一个副本。一个值得注意的例子是auto,它被设计为默认情况下不声明引用。看看下面的代码 std::tuple<int, i

假设我有一个包含类型
a
B
C
的元组:

std::tuple<A,B,C> t;
std::元组t;
如何提取对其中一个元素的引用(可变引用),以便修改它


std::get
返回一个副本。

与您在OP中所说的相反,
std::get
返回一个引用。事实上,它甚至有一个用于
元组&&
的重载,返回一个
T&
。你的误解可能源于这样一个事实,即你在一个表达式中使用它,导致了一个副本。一个值得注意的例子是
auto
,它被设计为默认情况下不声明引用。看看下面的代码

std::tuple<int, int> my_tuple;

// Declare an int whose value is copied from the first member of the tuple
auto my_int = get<0>(my_tuple);

// Get a reference to it instead
auto& my_int_ref = std::get<0>(my_tuple);
my_int_ref = 0;    // Assign 0 to the first element

// Direct use inside an expression also works.
std::get<0>(my_tuple) = 1;    // Assign 1 to the first element.
std::tuple my\u tuple;
//声明一个int,其值是从元组的第一个成员复制的
auto my_int=get(my_tuple);
//改为获取对它的引用
auto&my\u int\u ref=std::get(my\u元组);
my_int_ref=0;//将0指定给第一个元素
//在表达式中直接使用也有效。
std::get(my_tuple)=1;//将1指定给第一个元素。

与您在OP中所说的相反,
std::get
返回一个引用。事实上,它甚至有一个用于
元组&&
的重载,返回一个
T&
。你的误解可能源于这样一个事实,即你在一个表达式中使用它,导致了一个副本。一个值得注意的例子是
auto
,它被设计为默认情况下不声明引用。看看下面的代码

std::tuple<int, int> my_tuple;

// Declare an int whose value is copied from the first member of the tuple
auto my_int = get<0>(my_tuple);

// Get a reference to it instead
auto& my_int_ref = std::get<0>(my_tuple);
my_int_ref = 0;    // Assign 0 to the first element

// Direct use inside an expression also works.
std::get<0>(my_tuple) = 1;    // Assign 1 to the first element.
std::tuple my\u tuple;
//声明一个int,其值是从元组的第一个成员复制的
auto my_int=get(my_tuple);
//改为获取对它的引用
auto&my\u int\u ref=std::get(my\u元组);
my_int_ref=0;//将0指定给第一个元素
//在表达式中直接使用也有效。
std::get(my_tuple)=1;//将1指定给第一个元素。

std::get
确实返回引用。您是否尝试过
std::gett=A{}?获得副本的唯一原因可能是您试图将其分配给非引用变量。@patatahooligan谢谢您的帮助,您可以将此作为答案发布吗?
std::get
确实返回引用。您是否尝试过
std::gett=A{}?您获得副本的唯一原因可能是您试图将其分配给非引用变量。@patatahooligan谢谢您的帮助,您能将此作为答案发布吗?