Переменная-ссылка и списки инициализаторов - PullRequest
0 голосов
/ 08 февраля 2019

Я использую 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) создает копию, я, кажется, неправильно понимаю правило в списке инициализатора.

Спасибо ...

...