成立网站是不是需要先成立公司wordpress安装插件504

张小明 2026/1/9 11:23:49
成立网站是不是需要先成立公司,wordpress安装插件504,天津建设网站需要的费用,网页制作入门教程视频最近团队内做 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进行投诉反馈,一经查实,立即删除!

好学校平台网站模板农家乐怎么做网站

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2026/1/2 15:08:31 网站建设

视频解析网站如何做搜索石家庄网站建设全包

一、开启本地AI开发的新纪元在生成式AI飞速发展的今天,每一位开发者都渴望拥有无拘无束的算力。不再受制于云端排队、网络延迟或数据隐私的顾虑——NVIDIA DGX Spark横空出世让这一切有了可能。它不仅仅是一台计算机,它是浓缩在精致桌面机箱中的AI数据中…

张小明 2026/1/8 5:17:35 网站建设

做网站的步骤是什么房地产设计师

AutoGPT项目结构解读:新手也能看懂源码 在当前大语言模型(LLM)迅猛发展的背景下,我们正见证一场从“被动应答”到“主动执行”的AI范式变革。传统助手型应用依赖用户一步步下达指令,而像AutoGPT这样的自主智能体&#…

张小明 2026/1/7 14:51:36 网站建设

莱芜哪里做网站iis建站安装wordpress

文章详细解释了AI大模型的四个关键阶段:预训练(用海量通用数据打基础)、微调(用少量特定领域数据练专项技能)、LangChain(连接和扩展模型能力)以及评估与部署(给模型打分并使其上岗&…

张小明 2026/1/6 13:54:37 网站建设

苏州哪里做网站好儿童教育网站怎么做有趣

AI工具能否有效解决数学建模论文复现与排版难题?本文深度评测10款热门AI论文写作工具,助你快速找到高效助手,轻松应对时间紧、任务重的学术挑战。aibiye:专注于语法润色与结构优化,提升可读性aicheck:一键生…

张小明 2026/1/6 15:46:28 网站建设