我们说我有一个包含A
,B
和C
类型的元组:
std::tuple<A,B,C> t;
如何提取对其中一个元素的引用,一个可变引用,以便我可以修改它?
std::get
会返回一份副本。
答案 0 :(得分:2)
与你在OP中所说的相反,std::get
返回一个引用。实际上它甚至有tuple&&
的重载,返回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.