Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

Ключевое слово `auto`

#cpp #cpp_faq


Что значит ключевое слово auto в с++ и где оно применяется?
    


Ответы

Ответ 1



Это слово переопределено в новом стандарте и говорит компилятору: «Компилятор, возьми и угадай тип этой переменной!». Компилятор в многих случаях это может сам прекрасно сделать. Это удобно в шаблонах и для итераторов. Когда-то раньше это слово значило совсем другое.

Ответ 2



Каменный век Ключевое слово auto означает, что переменная находится в automatic storage и время жизни такой переменной local lifetime. Другими словами, мы указывали, что данная переменная лежит в стеке, но так как все переменные созданные в функциях как int a = 10; уже и так подразумивается, что они стековые - то это ключевое слово безсмысленное. Начиная с С++11 Начиная с С++11 ключевое слово auto обретает новую жизнь. Оно говорит, что компилятор на этапе компиляции должен определить тип переменной на основе типа инициализируемого выражения. #include #include #include using namespace std; class Foo { public: Foo( int x ) { } }; int main() { std::vector> arr; auto a = 166LL; auto b = 'a' + true; auto c = Foo(3); auto d = arr.begin(); cout << typeid(a).name() << endl; cout << typeid(b).name() << endl; cout << typeid(c).name() << endl; cout << typeid(d).name() << endl; return 0; } Output: http://rextester.com/BNNAL62867 Особенности auto Переменная auto должна быть объязательно проинициализирована Переменная auto не может быть класс-мембером Переменная auto не может быть параметром функции до С++14 http://ideone.com/n7dZge Тип auto не может быть возвращаемым типом функции до С++14. http://rextester.com/AFDFD63587 Холивар Cторонники: есть типы данных в С++, которые портят читаемость когда своей длинной (про итераторы std::vector, к примеру) и хотелось бы писать меньше. Для modern C++ в условиях метапрограммирования возможность возврата типа auto делает шаблон гибким. Противники: тип auto бьет по читабельности кода. Приходится гадать, что за переменная и делать лишнее действие в IDE наводя мышкой, чтобы понять что за тип. Такого рода "динамический тип" встает в разрез определению, что С++ строготипизированный язык. Я же за использование auto в меру. Не надо впадаться в крайности.

Комментариев нет:

Отправить комментарий