gpt4 book ai didi

c++ - call .mutable_mynested msg() 和 .nested msg() 之间有什么区别吗?

转载 作者:行者123 更新时间:2023-11-28 07:05:51 27 4
gpt4 key购买 nike

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

1) 
foo.mutable_bar()->set_somefield(...)

2)
nestedmsg = foo.bar();
nestedmsg.set_somefield() (where bar is message)

?

我发现 foo.bar() 对我不起作用。文档中的不同之处在于可变调用返回指针而不是 default_instance。但为什么第二种方式不起作用?

最佳答案

你的第二个版本甚至不应该编译:bar() 返回一个 const 引用,但是 set_somefield() 不是一个 const 方法。不要使用 const_cast 来解决这个问题!

这些方法之间的区别在于,mutable_bar() 实际上会使用新的子消息初始化 bar 字段(如果它还不存在)。也就是说,如果 has_bar() 总是在 mutable_bar() 之后返回 true,即使它之前是 false .另一方面,bar() 从不修改消息,因此不会影响 has_bar()。如果未设置 bar 字段,则 bar() 返回对类型默认实例的引用,您永远不要修改它 --这就是为什么它是常量。

如果您需要修改子消息,您必须始终使用mutable_ 变体。别担心,它永远不会返回空指针。

关于c++ - call .mutable_mynested msg() 和 .nested msg() 之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21782370/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com