当前位置: 首页 > news >正文

广东网页空间网站平台阿里云网站建设教程视频

广东网页空间网站平台,阿里云网站建设教程视频,网站设计亮点,营销网站建设优化#1024程序员节#xff5c;征文# ✨博客主页何曾参静谧的博客#x1f4cc;文章专栏「C/C」C/C程序设计#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计…#1024程序员节征文# ✨博客主页何曾参静谧的博客文章专栏「C/C」C/C程序设计全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明 目录 std::variant详解1. 引用头文件2. 注意事项3. 函数构造4. 对象初始化5. 元素访问6. 迭代器不适用7. 容器不适用8. 修改器9. 元素比较10.其他用法总结 应用场景 std::variant详解 1. 引用头文件 std::variant是C17引入的一种类型安全的联合体用于存储多个可能类型中的一种值。要使用std::variant首先需要包含头文件#include variant。 #include variant2. 注意事项 std::variant不允许存储引用、数组或void类型。std::variant没有空的状态每个构造好的std::variant对象至少调用了一次构造函数。如果std::variant的第一个类型没有默认构造函数那么调用std::variant的默认构造函数会导致编译错误。此时可以使用std::monostate作为第一个类型来确保std::variant能默认构造。使用std::variant时如果存储的类型有可能在语义上重叠或不明确如std::variantint, float需要特别注意操作和类型检查的准确性。 3. 函数构造 std::variant的构造函数允许通过直接赋值、std::in_place_type或std::in_place_index等方式进行初始化。 #include iostream #include variant #include stringint main() {std::variantint, double, std::string v1 42; // 直接赋值std::variantstd::string, int v2{std::in_place_typestd::string, Hello}; // 使用std::in_place_typestd::variantstd::string, int, float v3{std::in_place_index1, 66}; // 使用std::in_place_indexstd::cout v1.index() std::endl; //当前属于的类型 输出: 0std::cout std::getint(v1) std::endl; // 输出: 42std::cout std::getstd::string(v2) std::endl; // 输出: Hellostd::cout std::getint(v3) std::endl; // 输出: 66return 0; }4. 对象初始化 std::variant对象可以通过直接赋值、构造函数初始化列表等方式进行初始化。 std::variantint, double, std::string v 3.14; // 直接赋值初始化 std::variantstd::string, int w{World}; // 使用构造函数初始化列表5. 元素访问 访问std::variant中的元素可以使用std::get(variant)或std::get(variant)也可以使用std::visit进行更通用的访问。 #include iostream #include variant #include stringint main() {std::variantint, double, std::string v Hello;// 使用std::get访问try {std::cout std::getint(v) std::endl; // 这将抛出异常} catch (const std::bad_variant_access e) {std::cout Error: e.what() std::endl; // 输出: Error: bad variant access}// 使用std::get_if访问std::cout std::get_ifint(v) std::endl; // 输出: nullptr 0000000000000000std::cout *(std::get_ifstd::string(v)) std::endl; // 输出: hello// 使用std::visit访问std::visit([](auto arg) { std::cout arg std::endl; }, v); // 输出: Helloreturn 0; }6. 迭代器不适用 std::variant不支持迭代器因为它不是容器类型而是存储单一值的类型安全的联合体。 7. 容器不适用 虽然std::variant不能作为容器使用但它可以存储容器类型如std::vectorint等。 std::variantstd::vectorint, std::string container std::vectorint{1, 2, 3};8. 修改器 std::variant的值可以通过重新赋值进行修改。 std::variantint, double, std::string v 42; v 3.14; // 修改为double类型 v Hello; // 修改为std::string类型9. 元素比较 std::variant不支持直接比较但可以通过std::visit和适当的比较逻辑来实现比较功能。 #include iostream #include variant #include stringbool compare_variants(const std::variantint, double, std::string a, const std::variantint, double, std::string b) {return std::visit([](auto arg1, auto arg2) { return arg1 arg2; }, a, b); }int main() {std::variantint, double, std::string v1 42;std::variantint, double, std::string v2 42; // 注意这里是字符串类型// 比较会失败因为类型不同if (!compare_variants(v1, v2)) {std::cout v1 and v2 are not equal. std::endl; // 输出: v1 and v2 are not equal.}return 0; }10.其他用法 using var std::variantint, double, std::string;var value 1;int b 0;b std::getint(value);总结 std::variant是C17引入的一种类型安全的联合体用于存储多个可能类型中的一种值。它提供了类型安全和便利的接口相比传统的联合体union具有更高的安全性和灵活性。std::variant支持多种类型的存储和访问可以通过std::get、std::visit等方式进行元素访问同时提供了类型检查和异常处理机制。 应用场景 配置选项在开发中配置项可能需要支持多种数据类型如整数、字符串、布尔值等。使用std::variant可以简化配置管理使得一个配置变量能够存储多种类型的配置值。解析器在编写如JSON解析器或其他形式的解析器时数据结构可能需要存储不同类型的数据。std::variant提供了一种安全、灵活的方式来存储解析后的数据从而简化代码并增强其健壮性。状态机在实现状态机时每个状态可能需要不同类型的数据来描述。std::variant可以用来存储状态相关的数据使得状态转换和数据处理更加灵活和安全。命令模式在实现命令模式时如果命令的参数类型多样std::variant可以作为一个通用的参数容器提供统一的接口而隐藏实现细节。 通过了解和利用std::variant的这些特点和高级用法可以在C中更有效地处理那些需要存储和操作多种数据类型的场景同时保持代码的整洁性和安全性。
http://www.pierceye.com/news/638203/

相关文章:

  • vue做网站的优缺点番禺最新发布
  • 免费模板素材网站有哪些免费中文网站模板html
  • 本地建设多个网站链接平安保险网站
  • wordpress安装主题后无法查看媒体seo内容优化
  • 广告在线制作图片外贸推广建站蓝颜seo牛
  • 成都网站创建wordpress 未找到
  • 网站seo链接购买长宁广州网站建设
  • 网站分类导航代码wordpress笔记主题
  • 网站常用代码阿里云 全国网站建设
  • 盗取dede系统做的网站模板深圳建设工程信息网站
  • 百度SEO网站江门网站建设公司哪家好
  • 成都网站建设 四川冠辰科技php响应式网站
  • 大连网站建设辽icp备阿里云 网站
  • 网站开发前期准备做网站渠道
  • 网站根目录是哪里没有面板的服务器怎么建设网站
  • 济南市住房城乡建设网无锡优化网站公司
  • 公司网站设计好河南比较出名的外贸公司
  • 清除网站黑链湖州市住房和城乡建设局官方网站
  • 凡科网的网站建设好用吗网站开发过程的数据交互
  • 郑州做商城网站公司开发微信小程序流程
  • 宝安电子厂做网站外包app开发多少钱
  • 箱包 东莞网站建设公司网站建设与设计制作
  • 网站如何做点击链接地址直播平台排行榜前十名
  • 万网域名指向网站wordpress 下载媒体库
  • 小店网站制作php做的网站首页是什么文件
  • i深建官方网站淮南网络营销哪家强
  • 网上网站怎么做织梦网站模块
  • 怎么新建自己的网站百度广告推广费用
  • 北京 科技网站建设上海短视频推广公司
  • 帮别人做网站哪里可以接单大型网站开发团队的美工需要什么工作经验和教育背景及薪酬