参考变量和初始化程序列表

时间:2019-02-08 20:18:24

标签: c++ protobuf-c

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

谢谢...

0 个答案:

没有答案