C++ 调用.mutable_mynestedmsg()和.mynestedmsg()之间有什么区别吗?
我是google protobuf的新手,需要知道以下方法之间有什么不同:C++ 调用.mutable_mynestedmsg()和.mynestedmsg()之间有什么区别吗?,c++,protocol-buffers,mutable,C++,Protocol Buffers,Mutable,我是google protobuf的新手,需要知道以下方法之间有什么不同: 1) foo.mutable_bar()->set_somefield(...) 及 ? 我发现foo.bar()对我不起作用。文档中的不同之处在于,mutable调用返回指针,而不是默认的_实例。但是为什么第二种方法不起作用呢 您的第二个版本甚至不应该编译:bar()返回常量引用,但是set\u somefield()不是常量方法。不要使用const\u cast来回避这个问题 两种方法之间的区别在于muta
1)
foo.mutable_bar()->set_somefield(...)
及
?
我发现foo.bar()对我不起作用。文档中的不同之处在于,mutable调用返回指针,而不是默认的_实例。但是为什么第二种方法不起作用呢 您的第二个版本甚至不应该编译:
bar()
返回常量引用,但是set\u somefield()
不是常量方法。不要使用const\u cast
来回避这个问题
两种方法之间的区别在于mutable_bar()
实际上使用新的子消息初始化bar
字段(如果该字段尚未存在)。也就是说,如果has_bar()
在mutable_bar()
之后将始终返回true
,即使它是false
<另一方面,code>bar()从不修改消息,因此不会影响has\u bar()
。如果未设置bar
字段,则bar()
将返回对该类型默认实例的引用,您永远不应该修改该实例,这就是它是常量的原因
如果需要修改子消息,则必须始终使用可变
变量。别担心,它永远不会返回空指针
2)
nestedmsg = foo.bar();
nestedmsg.set_somefield() (where bar is message)