我正在使用protobuf,并且正在将const引用分配给另一个引用,如果使用{}
,这似乎会触发复制构造函数,但是如果使用()
,则可以正常工作。
例如,
// Protobuf Messages
message Test {
string x = 1;
}
message List {
repeated Test tests = 1;
}
int main()
{
List l {};
const google::protobuf::RepeatedPtrField<Test>& a = l.tests();
const google::protobuf::RepeatedPtrField<Test>& b = a; // 1
const google::protobuf::RepeatedPtrField<Test>& c {a}; // 2
const google::protobuf::RepeatedPtrField<Test>& d (a); // 3
}
Call(1、3)可以正常工作,但是Call(2)似乎可以调用定义为
的副本构造函数template <typename Element>
inline RepeatedPtrField<Element>::RepeatedPtrField(
const RepeatedPtrField& other)
: RepeatedPtrFieldBase() {
MergeFrom(other);
}
有人可以帮我理解为什么Call(2)创建一个副本,我似乎对初始化列表中的规则有误解。
谢谢...