2

我正在使用 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) 创建一个副本,我似乎误解了初始化列表中的一条规则。

谢谢...

4

0 回答 0