当前位置: 首页> 汽车> 维修 > C++ 20新特性之结构化绑定

C++ 20新特性之结构化绑定

时间:2025/7/12 23:34:18来源:https://blog.csdn.net/hope_wisdom/article/details/139428396 浏览次数: 0次

💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。

什么是结构化绑定

        在C++ 20出现之前,当我们需要访问一个结构体或类的多个成员时,通常使用.或->操作符。对于复杂的数据结构,这种访问方式往往会显得冗长,也难以理解。C++ 20中引入的结构化绑定允许我们直接从一个聚合类型(比如:tuple、struct、class等)中提取出多个成员,并为它们分别命名。这一特性大大简化了对复杂数据结构的访问方式,使代码更加清晰、易读。

如何使用

        使用结构化绑定比较简单,在声明变量时使用auto关键字和&符号,并用{}包含聚合类型的各个成员即可。其中,&符号为可选,表示引用。

        首先,我们来看一下绑定元组的情况。在下面的示例代码中,我们通过std::make_tuple创建了一个包含人员信息的元组,并使用结构化绑定一次性解包为name、age两个变量。通过这种方式,数据访问变得简洁而高效。

#include <iostream>
#include <tuple>int main()
{// 绑定到元组auto person = std::make_tuple("Mike", 18);const auto& [name, age] = person;std::cout << "Name: " << name << ", Age: " << age << std::endl;return 0;
}

        接下来,我们学习下绑定数组和结构体的情况。在下面的示例代码中,我们将数组pnNumber赋值给对应的变量a、b和c,同时将结构体person赋值给对应的变量name和age。

#include <iostream>
#include <string>struct TPersonInfo
{std::string name;int age;
};int main()
{// 绑定到数组int pnNumber[] = {66, 77, 88};auto [a, b, c] = pnNumber;std::cout << a << ", " << b << ", " << c << std::endl;// 绑定到结构体TPersonInfo person{"Jack", 25};auto& [name, age] = person;std::cout << "Name: " << name << ", Age: " << age << std::endl;return 0;
}

        除了上面介绍的这些,结构化绑定还支持直接绑定到匿名元组、匿名结构体和匿名联合。在下面的示例代码中,我们使用lambda表达式创建了一个临时的元组,并通过结构化绑定到匿名变量a和b上,避免了额外的变量声明。

#include <iostream>int main()
{// 绑定到匿名元组auto [a, b] = []{ return std::make_tuple(66, 99); }();std::cout << a << ", " << b << std::endl;return 0;
}

注意事项

        1、结构化绑定只能用于聚合类型,不能用于基本数据类型。

        2、结构化绑定的变量是只读的,不能通过它们来修改原始数据。如果确实需要修改原始数据,可以使用引用或直接访问原始数据。

        3、绑定顺序必须与聚合类型中元素的声明顺序保持一致。

        4、如果不关心聚合类型中的某些成员,可以使用下划线_占位符来忽略不需要的成员。

关键字:C++ 20新特性之结构化绑定

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: