如何免费制作网站?南宁模板建站哪家好

张小明 2025/12/29 23:35:36
如何免费制作网站?,南宁模板建站哪家好,wordpress如何添加关键词和描述,seo搜索是什么最近团队内做 Code Review 时#xff0c;发现很多小伙伴对 Protobuf 的赋值方法一脸懵#xff0c;踩坑的次数多了#xff0c;索性今天把 Protobuf 里 set、add、mutable 这些核心赋值方式整理清楚#xff0c;帮大家少走弯路。 先说明下#xff0c;本文基于 Protobuf 3.x发现很多小伙伴对 Protobuf 的赋值方法一脸懵踩坑的次数多了索性今天把 Protobuf 里 set、add、mutable 这些核心赋值方式整理清楚帮大家少走弯路。先说明下本文基于 Protobuf 3.x目前主流版本如果还在用 2.x 的小伙伴注意下required/optional的差异即可核心用法基本一致。先搭个基础定义一个示例 Proto聊用法前先定义一个简单的 Proto 文件作为示例后面所有代码都基于这个结构大家看起来更直观// user.proto syntax proto3; // 声明protobuf版本 // 订单消息 message Order { int64 order_id 1; // 订单ID string product_name 2; // 商品名 double price 3; // 价格 } // 用户消息 message User { int64 id 1; // 单值基本类型整型 string name 2; // 单值基本类型字符串 bool is_vip 3; // 单值基本类型布尔 Order default_order 4; // 单值嵌套消息一对一 repeated int32 scores 5; // 重复基本类型数组 repeated Order orders 6; // 重复嵌套消息数组 }用 protoc 编译后会生成user.pb.h和user.pb.cc后续 C 代码需要包含这个头文件并链接 Protobuf 库。一、set 系列单值基本类型适用场景set_xxx()是 Protobuf 最基础的赋值方法专门用于单值基本类型字段int/string/bool/double 等也就是 Proto 里没有repeated修饰、也不是嵌套消息的字段。核心特点方法名规则set_ 字段名小写开头Proto 里的驼峰字段会自动转成下划线比如 Proto 里的orderId会生成set_order_id()赋值后调用has_xxx()会返回true判断字段是否已赋值支持覆盖赋值多次调用会替换原有值。代码示例#includeuser.pb.h#includeiostreamusingnamespacestd;intmain(){// 初始化User对象User user;// 给单值基本类型赋值set_xxx()user.set_id(1001);// 给int64类型赋值user.set_name(张三);// 给string类型赋值user.set_is_vip(true);// 给bool类型赋值// 验证赋值结果cout用户IDuser.id()endl;// 输出1001cout用户名user.name()endl;// 输出张三cout是否VIPboolalphauser.is_vip()endl;// 输出truecout是否设置了nameuser.has_name()endl;// 输出truereturn0;}小提醒Protobuf 3.x 中所有字段默认都是 optional可选不需要显式声明如果是 2.x 版本required 字段必须赋值否则序列化会报错。二、mutable 系列嵌套消息适用场景当字段是单值嵌套消息比如示例中 User 的default_order字段一对一的嵌套不能直接用 set 赋值必须通过mutable_xxx()获取可修改的消息指针再给嵌套消息的字段赋值。核心特点mutable_xxx()返回嵌套消息的非 const 指针通过指针可以修改嵌套消息的字段如果嵌套消息未初始化之前没赋值调用mutable_xxx()会自动创建一个空的嵌套消息对象对比get_xxx()get_xxx()返回 const 指针只能读不能改而mutable_xxx()是可写的。代码示例#includeuser.pb.h#includeiostreamusingnamespacestd;intmain(){User user;// 给嵌套消息赋值先通过mutable获取指针再赋值Order*default_orderuser.mutable_default_order();// 获取嵌套消息指针default_order-set_order_id(2025001);// 给嵌套消息的字段赋值default_order-set_product_name(小米手机);default_order-set_price(2999.99);// 简化写法链式调用user.mutable_default_order()-set_order_id(2025002);// 覆盖原有值// 读取嵌套消息内容cout默认订单IDuser.default_order().order_id()endl;// 输出2025002cout默认订单商品user.default_order().product_name()endl;// 输出小米手机return0;}常见坑点错误写法直接给get_xxx()返回的 const 指针赋值// 编译报错get_default_order()返回const Order*不能修改user.get_default_order()-set_order_id(2025001);正确写法必须用mutable_xxx()获取可写指针。三、add 系列重复字段适用场景add_xxx()专门用于repeated 字段重复字段对应 C 里的动态数组不管是重复基本类型还是重复嵌套消息新增元素都要用它。分两种情况讲解重复基本类型如示例中的scoresadd_xxx()直接传入值即可每次调用新增一个元素到数组末尾。重复嵌套消息如示例中的ordersadd_xxx()返回嵌套消息的指针需要通过指针给新元素赋值。代码示例#includeuser.pb.h#includeiostreamusingnamespacestd;intmain(){User user;// 1. 给重复基本类型赋值add_xxx(值)user.add_scores(90);// 新增第一个成绩user.add_scores(85);// 新增第二个成绩user.add_scores(95);// 新增第三个成绩// 遍历重复基本类型cout成绩列表;for(inti0;iuser.scores_size();i){coutuser.scores(i) ;// 输出90 85 95}coutendl;// 2. 给重复嵌套消息赋值add_xxx()返回指针再赋值Order*order1user.add_orders();// 新增第一个订单返回指针order1-set_order_id(2025001);order1-set_product_name(华为平板);order1-set_price(1999.0);Order*order2user.add_orders();// 新增第二个订单order2-set_order_id(2025002);order2-set_product_name(苹果耳机);order2-set_price(899.0);// 遍历重复嵌套消息cout订单列表endl;for(inti0;iuser.orders_size();i){constOrderorderuser.orders(i);cout第i1个订单IDorder.order_id()商品order.product_name()价格order.price()endl;}// 额外修改重复字段指定位置的元素MutableXXX()user.mutable_scores(1)-set_value(88);// 把第二个成绩改成88user.mutable_orders(0)-set_price(1899.0);// 把第一个订单价格改成1899.0return0;}补充重复字段的其他操作除了 add重复字段还有这些常用方法xxx_size()获取重复字段的元素个数clear_xxx()清空所有元素mutable_xxx(int index)获取指定索引位置的可修改指针修改已有元素xxx(int index)获取指定索引位置的 const 值只读。四、其他常用赋值方式除了 set/add/mutable还有几个高频赋值方法值得一提1. CopyFrom深拷贝整个消息把一个消息对象的所有字段值深拷贝到另一个对象会覆盖目标对象的原有值。#includeuser.pb.h#includeiostreamusingnamespacestd;intmain(){User user1;user1.set_id(1001);user1.set_name(张三);User user2;user2.CopyFrom(user1);// 把user1的所有值拷贝到user2coutuser2.id()endl;// 输出1001coutuser2.name()endl;// 输出张三return0;}2. MergeFrom合并消息不覆盖已有值和 CopyFrom 不同MergeFrom 只会把源对象中 “未设置” 的字段赋值给目标对象已有值的字段不会被覆盖。#includeuser.pb.h#includeiostreamusingnamespacestd;intmain(){User user1;user1.set_id(1001);user1.set_name(张三);User user2;user2.set_id(1002);// 先给id赋值user2.MergeFrom(user1);// 合并user1到user2coutuser2.id()endl;// 输出1002已有值不覆盖coutuser2.name()endl;// 输出张三无值合并return0;}3. Swap交换两个消息的内容高效交换两个同类型消息的所有字段底层只是交换指针性能极高。#includeuser.pb.h#includeiostreamusingnamespacestd;intmain(){User user1,user2;user1.set_id(1001);user2.set_id(1002);user1.Swap(user2);// 交换内容coutuser1.id()endl;// 输出1002coutuser2.id()endl;// 输出1001return0;}五、核心用法总结表为了方便大家快速查阅我把所有赋值方式的适用场景整理成了表格方法类型方法名示例适用字段类型核心作用setset_id()单值基本类型int/string 等给单值基本类型字段赋值mutablemutable_default_order()单值嵌套消息获取嵌套消息指针修改其字段addadd_scores()重复基本类型新增重复基本类型元素addadd_orders()重复嵌套消息新增重复嵌套消息元素MutableXxxmutable_scores(0)重复字段指定位置修改重复字段指定索引的元素CopyFromCopyFrom(user1)任意消息类型深拷贝整个消息覆盖原有值MergeFromMergeFrom(user1)任意消息类型合并消息不覆盖已有值SwapSwap(user2)任意消息类型高效交换两个消息内容六、避坑指南嵌套消息别用 set比如想给default_order赋值别写user.set_default_order(xxx)Protobuf 不会生成这个方法必须用 mutable重复字段别直接改索引比如user.scores(0) 90是错的要改已有元素用mutable_scores(0)-set_value(90)别混淆 mutable 和 add单嵌套消息用 mutable重复字段新增用 add指定索引修改重复字段用mutable_xxx(index)注意空指针问题如果嵌套消息没初始化直接调用get_xxx()不会崩溃但返回的是空对象调用其方法会得到默认值比如 int 默认 0string 默认空版本兼容Protobuf 2.x 的 required 字段必须赋值3.x 移除了 required所有字段都是可选的。最后其实 Protobuf 的赋值逻辑很简单看字段类型选方法—— 基本类型用 set嵌套消息用 mutable重复字段用 add。平时写代码时多看看生成的.pb.h文件里的方法名就能快速对应上。如果大家还有其他踩坑经历或者有更简洁的用法欢迎在评论区交流 觉得这篇文章有用的话点个赞再走呗
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

个人网站开发开题报告wp博客seo插件

Linly-Talker如何防止生成虚假信息?内容审核机制介绍 在数字人逐渐走进直播间、课堂和客服中心的今天,一个关键问题浮出水面:我们该如何相信AI说的每一句话? Linly-Talker作为一款集成了大语言模型(LLM)、语…

张小明 2025/12/29 10:47:16 网站建设

天津网站建设培训课件励志网站织梦源码

HLS.js AV1播放指南:如何在浏览器中实现下一代视频编码 【免费下载链接】hls.js HLS.js is a JavaScript library that plays HLS in browsers with support for MSE. 项目地址: https://gitcode.com/gh_mirrors/hl/hls.js HLS.js作为业界领先的JavaScript库…

张小明 2025/12/29 4:59:21 网站建设

如何建设好高校网站手表网站那个好

一、系统总体设计方案 本系统以PLC为核心,对传统T68镗床的继电器-接触器控制系统进行改造,构建“控制-执行-检测”三层架构,实现镗床主轴旋转、进给运动等功能的自动化控制。系统采用西门子S7-200 SMART PLC作为控制核心,其具备14…

张小明 2025/12/28 17:43:21 网站建设

做网站绑定 对应的域名网站平台建设属于什么采购

终极效率神器:5步掌握现代自动化工具的完整指南 【免费下载链接】PuloversMacroCreator Automation Utility - Recorder & Script Generator 项目地址: https://gitcode.com/gh_mirrors/pu/PuloversMacroCreator 你是否曾经计算过每天花在重复性点击、复…

张小明 2025/12/29 8:15:44 网站建设

网站建设除了凡科还有哪些WordPress上传后找不到

Windows 12网页版:浏览器中的完整桌面系统体验指南 【免费下载链接】win12 Windows 12 网页版,在线体验 点击下面的链接在线体验 项目地址: https://gitcode.com/gh_mirrors/wi/win12 想要在浏览器中体验完整的Windows 12操作系统吗?这…

张小明 2025/12/28 22:11:30 网站建设

网站受到攻击会怎么样wordpress plugin 开发

风储虚拟惯量调频仿真模型,风电调频,一次调频,四机两区系统,采用频域模型法使得风电渗透率25%,附加虚拟惯性控制,储能附加下垂控制,参与系统一次调频,系统频率特性优。 有SOC特性 特…

张小明 2025/12/28 22:29:29 网站建设