为什么protobuf :: message :: GetMessage返回引用?

时间:2015-03-30 08:39:24

标签: c++ protocol-buffers

在查看Message Reflection的protobuf界面时,似乎有两个函数:GetMessageMutableMessage。天真地可以想到,前者只是后者的常见变体。然而,似乎,由于前者返回引用而不是指针,这两个做了不同的事情。遗憾的是,我还没有找到任何关于两者之间概念差异的深入文档。

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

2 个答案:

答案 0 :(得分:2)

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

(也就是说,作为你所谈论的代码的作者,我个人并不是这条规则的粉丝。)

Stefan Haustein是正确的,GetMessage()可以返回默认值,而MutableMessage()确保消息被初始化,但这与参考/指针差异无关。

答案 1 :(得分:1)

前者实际上只是后者的const版本,除了尚未设置字段的情况:在这种情况下,GetMessage返回默认值{{1一个新分配的实例。

返回MutableMessage引用的事实突出显示此方法永远不会返回const。并且它也以这种方式与生成的API一致。