С++ автоматически вставляет в функцию ссылку на вектор?
void add_item(vector<string>& vec) {
vec.push_back("New item!");
}
int main() {
vector<string> vec;
add_item(vec); //1
for (string s : vec) {
cout << s << '\n';
}
return 0;
}
В коде отмечена строчка 1, получается, мы ложим в функцию вектор, но в качестве аргумента функции в самом объявлении функции указана ссылка. Как так то? C++ автоматически берет ссылку?
Указатели - наследие С, в них содержится конкретное значение (адрес в памяти). Это значение надо получать явно.
Ссылки - синтаксический сахар более высокоуровневого языка. С ними компилятор разбирается сам.
в качестве аргумента функции в самом объявлении функции указана ссылка.
Это не объявление функции. Это - определение функции.
При объявлении и определении функции аргументов нет, есть параметры. Аргументы появляются только в месте вызова функции.
Это все нужно очень хорошо запомнить.
Как так то? C++ автоматически берет ссылку?
C++ - это язык. Работу выполняет транслятор. Ни один из них ничего сам без просьбы не делает. Язык так и вовсе лишь стандартом представлен.
Сам что-либо делает только писатель кода. Вот как ты написал, так транслятор код согласно стандарту языка и обработает. Это ты написал передачу по ссылке, транслятор просто обработал код согласно стандарту.