在查看Message Reflection的protobuf界面时,似乎有两个函数:GetMessage
和MutableMessage
。天真地可以想到,前者只是后者的常见变体。然而,似乎,由于前者返回引用而不是指针,这两个做了不同的事情。遗憾的是,我还没有找到任何关于两者之间概念差异的深入文档。
有谁知道并且可以详细说明?
答案 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一致。