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