Доступ к паре .first
фактически дает вам ссылку на соответствующую запись, так что rezVector[0].first
будет иметь тип char*&
. Это позволяет вам изменять содержимое rezVector[0].first
, если вы действительно хотите это сделать. Но вы также можете присвоить результат rezVector[0].first
объекту типа char*
, так что вы получите копию указанного значения.
Так что я думаю, что выбор правильного типа зависит от того, что вы хотите сделать с результатом. Вы хотите изменить содержимое пары на месте или просто скопировать информацию?
См. Разницу в следующем примере:
int main() {
char val1[] = "Hello";
char val2[] = "World";
char val3[] = "out there";
vector<pair<char*, int> > rezVector; //is vector I'm using
rezVector.push_back({val1,10});
cout << "initial: " << rezVector[0].first << std::endl;
char*& tempPairFirstReadWrite = rezVector[0].first;
tempPairFirstReadWrite = val2;
cout << "changed: " << rezVector[0].first << std::endl;
char* tempPairFirstReadOnly = rezVector[0].first;
tempPairFirstReadOnly = val3;
cout << "not changed again: " << rezVector[0].first << std::endl;
}
Выход:
initial: Hello
changed: World
not changed again: World