gpt4 book ai didi

c++ - 结构化绑定(bind)和强制复制省略

转载 作者:太空狗 更新时间:2023-10-29 20:53:45 24 4
gpt4 key购买 nike

如果你像这样使用结构化绑定(bind)

auto [a, b, c] = std::make_tuple(1, 10.0, "string object"s);

然后将删除返回的元组中的拷贝,对象直接进入 abc 或者初始化是从单个元组元素移动结构?我怀疑这会导致复制发生,但我不确定标准中对强制复制省略的描述是否处理了这种情况。

最佳答案

this excellent answer 所述,声明等同于:

auto e = std::make_tuple(1, 10.0, "string object"s);
int& a = get<0>(e);
double& b = get<1>(e);
std::string& c = get<2>(e);

除了没有名字e。在此上下文中,get 函数生成对所选项目的左值引用。

在 C++17 中,auto name = prvalue; is defined声明一个类型为 decltype(prvalue) 的名为 name 的对象,该对象用 prvalue 表达式初始化——没有像以前版本那样可省略的中间临时对象。

换句话说,e 声明的行为与:

std::tuple<int, double, std::string> e {1, 10.0, "string object"s};

然后是 a,b,c 是对该元组元素的引用。


注:以上解释对应最新的C++17 draft sources;当然,在 C++17 最终确定之前,行为可能会发生变化。

关于c++ - 结构化绑定(bind)和强制复制省略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41784796/

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