c++ - 为什么 protobuf::message::GetMessage 返回一个引用?

标签 c++ protocol-buffers

看消息反射的protobuf接口(interface),好像有两个函数:GetMessageMutableMessage。天真地认为,前者只是后者的 const 变体。然而,由于前者返回的是引用而不是指针,因此这两个函数似乎做了不同的事情。遗憾的是,我还找不到任何关于两者之间概念差异的深入文档。

有谁知道并可以详细说明吗?

最佳答案

一个使用引用而另一个使用指针的原因是 Google C++ Style Guide指定 references must always be const ,并且指针应该用于可变对象(即使不允许指针为空)。这纯粹是风格问题。一种思考方式是,通过 const 引用传递就像通过复制传递的优化版本:语法看起来相同,语义非常相似,但您避免了实际的复制步骤。

(也就是说,作为您正在谈论的代码的作者,我个人不喜欢这条规则。)

Stefan Haustein 是正确的,GetMessage() 可以返回默认值,而 MutableMessage() 确保消息已初始化,但这与引用/指针无关区别。

关于c++ - 为什么 protobuf::message::GetMessage 返回一个引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29341700/

相关文章:

c++ - 更改 vector 值导致段错误

Java、GTFS Realtime、protocol buffers,简单搞定?

Hadoop 基础知识 : What do I do with the output?

go - 警告 : Missing 'go_package' option

c++ - openmp并行性能

c++ - Visual C++ 优化器是否对可用内存量敏感?

c++ - 如何在c++中通过socket使用protobuf发送序列化数据

go - go 的 protobuf 实现是否支持 DynamicMessage?

c++ - if(null) 正在使用 clang++ 编译的特定计算机中执行

c++ - OpenCV 网络摄像头 MJPG 低 FPS