gpt4 book ai didi

c++ - 是否有一个单行程序可以将元组/对解压缩到引用中?

转载 作者:IT老高 更新时间:2023-10-28 21:53:10 26 4
gpt4 key购买 nike

我经常写像

这样的片段
int x,y,z; tie(x,y,z) = g[19];

例如,g 是较早声明的

vector<tuple<int,int,int>> g(100);

问题是,也许以后我真的想让 xy 以引用的方式指向 g 的内部,而重构是丑陋的,例如

int &x = get<0>(g[19]);
int &y = get<1>(g[19]);
int &z = get<2>(g[19]);

有时甚至更糟,例如,如果访问是一个更复杂的表达式

tuple<int,int,int> &p = g[19]; // if the rhs was actually more complicated
int &x = get<0>(p);
int &y = get<1>(p);
int &z = get<2>(p);

有没有更好的重构方式,更多的是 tie(..) 的赋值方式?

据我所知,困难在于引用坚持要初始化exactly at their declaration .那么,换句话说,有没有办法在 c++ 中为多个变量 initialization 使用类似 tie 的语法(这也将使早期的非引用用法更清晰)?

最佳答案

幸运的是,C++17 有一个解决这个问题的方法,structured binding declaration .甚至非引用接口(interface)也可以改进。

auto[x, y, z] = g[i];

上面的行声明了 x, y,z 并用 g[i] 的值初始化它们。它不仅更干净,而且对于构建成本高昂的类型可能更有效。

要获得对 g[i] 成员的引用,可以这样写

auto& [x, y, z] = g[i];

关于c++ - 是否有一个单行程序可以将元组/对解压缩到引用中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37876288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com