freeCodeCamp/guide/russian/cplusplus/the-auto-feature/index.md

4.3 KiB
Raw Blame History

title localeTitle
The Auto Feature Автофункция

Автофункция

auto - это функция C ++ 11, которая позволяет компилятору вывести тип данных для вас в определении. Это может сэкономить вам много информации, особенно со сложными типами.

Без auto :

double x = 10.425; 
 double y = x * x; 

С auto :

double x = 10.425; 
 auto y = x * x; 

Хотя это может показаться тривиальным, становится невероятно полезным, когда типы данных начинают усложняться. Например, предположим, что вы хотите сохранить vector сотрудников, и вас интересует только их имя и возраст. Одним из способов хранения имени и возраста может быть pair со string и unsigned int . Это объявляется как std::vector<std::pair<std::string, unsigned int>> employees . Теперь предположим, что вы хотите получить доступ к последнему добавленному сотруднику:

std::vector<std::pair<std::string, unsigned int>> employees; 
 
 // without auto, you have to write: 
 std::pair<std::string, unsigned int>> last_employee = employees.back(); 
 
 // with auto, you just have to write: 
 auto last_employee = employees.back(); 

Как только компилятор определит тип в правой части = он заменяет auto этим типом.

В современных версиях C ++ (начиная с C ++ 14) auto можно также использовать в объявлении функции как возвращаемый тип. Затем компилятор выводит возвращаемый тип из оператора return внутри функции. Следуя примеру сотрудников:

std::vector<std::pair<std::string, unsigned int>> employees; 
 auto get_last_employee() { 
    return employees.back(); // Compiler knows the return type from this line. 
 } 

Компилятор будет знать из строки с оператором return, что тип возврата из функции должен быть std::vector<std::pair<std::string, unsigned int>> .

В то время как довольно технически, страница cppreference на авто описывает еще много способов использования auto и деталей, когда это возможно и не может быть использовано.

auto перед C ++ 11

В некоторых старых учебниках, содержащих очень старый код, ключевое слово auto используется совсем по-другому.

Этот конкретный auto был ключевым словом, заимствованным из C, и, вероятно, был наименее используемым ключевым словом всех времен.

В C ++ все переменные имеют автоматическую продолжительность , то есть они определяются до тех пор, пока вы не выйдете из функции, в которой они определены.

Например:

`` `Каст

включают

int main () { int a; a = 1; // имеет смысл, поскольку он был определен в той же функции

    return 0; 

} a = 2; // не имеет смысла, так как a здесь не определен `` `

Это задано в C ++, и auto указывает, что переменная должна иметь автоматическую продолжительность , следовательно, отсутствие использования.

Дальнейшее чтение :