看消息反射的protobuf接口(interface),好像有两个函数:GetMessage
和MutableMessage
。天真地认为,前者只是后者的 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/