Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用.mutable_mynestedmsg()和.mynestedmsg()之间有什么区别吗?_C++_Protocol Buffers_Mutable - Fatal编程技术网

C++ 调用.mutable_mynestedmsg()和.mynestedmsg()之间有什么区别吗?

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

我是google protobuf的新手,需要知道以下方法之间有什么不同:

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)