C++11, 14, 17对tuple元素的访问方式
2021/12/26 1:07:29
本文主要是介绍C++11, 14, 17对tuple元素的访问方式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
std::tuple 作为可以存放任意个数,任意类型的元祖被我个人经常使用。记得以前看侯捷谈到这个数据结构的时候,被他的实现所惊奇,太巧妙地设计。我自己在使用std::tuple的时候也随着C++版本的更新尝试新的写法,对于元组中元素的获取,我一直觉得很有意思:
比如我有这么一个源文件:
#include <iostream> #include <tuple> #define CPP11 (__cplusplus < 201401L) #define CPP14 (__cplusplus < 201701L and __cplusplus > 201401L) #define CPP17 (__cplusplus >= 201702L) class Moo { Moo() { ::printf("%s\n", __PRETTY_FUNCTION__); } Moo(Moo const &) { ::printf("%s\n", __PRETTY_FUNCTION__); } Moo(Moo &&) { ::printf("%s\n", __PRETTY_FUNCTION__); } Moo &operator=(Moo const &) noexcept { ::printf("%s\n", __PRETTY_FUNCTION__); return *this; } Moo &operator=(Moo &&) noexcept { ::printf("%s\n", __PRETTY_FUNCTION__); return *this; } ~Moo() { ::printf("%s\n", __PRETTY_FUNCTION__); } }; int main() { std::cout << "c++ version:" << __cplusplus << std::endl; auto &&tp = std::make_tuple<Moo, const char *, int>(Moo(), "hello world", 3); #if CPP11 auto &&first = std::get<0>(tp); auto &&second = std::get<1>(tp); auto &&third = std::get<2>(tp); #endif #if CPP14 auto &&first = std::get<Moo>(tp); auto &&second = std::get<const char *>(tp); auto &&third = std::get<int>(tp); #endif #if CPP17 auto [a, b, c] = tp; auto &[first, second, third] = tp; #endif return 0; }
Moo类考察当前对象在构造tuple和返回值的过程中经历怎样的人生
C++11: 使用std::get方法来获取对应秩的元素的引用
C++14: 使用类似在nlohmannjson
里面获取对应类型的json对象的方式,通过类型来获取对应的元素的引用,有点现代C++那味儿了吼
C++17: 引入了结构化绑定,不实用引用的时候会返回新创建的临时对象,a, b, c是对临时对象的右值引用,而使用引用则是想std::get那样引用原本对象。C++17结构化绑定yyds!表达力比之前强太多
这篇关于C++11, 14, 17对tuple元素的访问方式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27文件掩码什么意思?-icode9专业技术文章分享
- 2024-12-27如何使用循环来处理多个订单的退款请求,代码怎么写?-icode9专业技术文章分享
- 2024-12-27VSCode 在编辑时切换到另一个文件后再切回来如何保持在原来的位置?-icode9专业技术文章分享
- 2024-12-27Sealos Devbox 基础教程:使用 Cursor 从零开发一个 One API 替代品 审核中
- 2024-12-27TypeScript面试真题解析与实战指南
- 2024-12-27TypeScript大厂面试真题详解与解析
- 2024-12-26怎么使用nsenter命令进入容器?-icode9专业技术文章分享
- 2024-12-26导入文件提示存在乱码,请确定使用的是UTF-8编码怎么解决?-icode9专业技术文章分享
- 2024-12-26csv文件怎么设置编码?-icode9专业技术文章分享
- 2024-12-25TypeScript基础知识详解