Что значит ключевое слово auto
в с++ и где оно применяется?
Это слово переопределено в новом стандарте и говорит компилятору: «Компилятор, возьми и угадай тип этой переменной!». Компилятор в многих случаях это может сам прекрасно сделать. Это удобно в шаблонах и для итераторов.
Когда-то раньше это слово значило совсем другое.
Ключевое слово auto означает, что переменная находится в automatic storage и время жизни такой переменной local lifetime. Другими словами, мы указывали, что данная переменная лежит в стеке, но так как все переменные созданные в функциях как
int a = 10;
уже и так подразумивается, что они стековые - то это ключевое слово безсмысленное.
Начиная с С++11 ключевое слово auto обретает новую жизнь. Оно говорит, что компилятор на этапе компиляции должен определить тип переменной на основе типа инициализируемого выражения.
#include <iostream>
#include <typeinfo>
#include <vector>
using namespace std;
class Foo
{
public:
Foo( int x )
{
}
};
int main()
{
std::vector<std::vector<Foo*>> 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
Cторонники: есть типы данных в С++, которые портят читаемость когда своей длинной (про итераторы std::vector, к примеру) и хотелось бы писать меньше. Для modern C++ в условиях метапрограммирования возможность возврата типа auto делает шаблон гибким.
Противники: тип auto бьет по читабельности кода. Приходится гадать, что за переменная и делать лишнее действие в IDE наводя мышкой, чтобы понять что за тип. Такого рода "динамический тип" встает в разрез определению, что С++ строготипизированный язык.
Я же за использование auto в меру. Не надо впадаться в крайности.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не получается скомпилировать драйвер для WI-Fi usb: rt5572stako
Как ответить на следующих вопрос? Он будет на собеседовании на работу
Создаю класс, в нем есть 2 метода и статические свойства для хранения данныхЗадача: имеется 2 класса, один из них изменяет значения статического...