Какой простейший пример использования auto в C ++?

Я пытаюсь понять как auto используется в C ++. Для меня лучший способ понять что-то — это увидеть пример. Однако примеры, которые я видел, не так просты. Например вот «Значение C ++ 0x авто-ключевое слово, например?Msgstr «Чтобы понять этот пример, мне нужно знать, что такое» шаблоны «,» указатели «,» malloc «и так далее.

Кто-нибудь может привести минималистичный пример использования auto, чтобы можно было легко понять, для чего он используется?

3

Решение

int a = 10;
int b = 20;

auto c = a+b; // c will be int
12

Другие решения

auto используется для вывода типа, то есть для объявления типа, основанного на выражении, вместо его явного указания.

auto val = 3; // here, val is declared as an integer

Очевидно, это не такое большое преимущество перед int val = 3 Итак, давайте сделаем лучший пример:

std::vector<int> container; // ...
for (auto it = container.begin(); it != container.end(); it++) {
// type of it is std::vector<int>::iterator, but you don't need to state that
}

здесь вам не нужно заботиться о реальном типе контейнера, т.е. std::vector<int>::iterator it = c.begin(), Кроме того, вы можете изменить container от вектора к списку, и цикл по-прежнему будет работать без каких-либо изменений, как тип it будет правильно выведен.

ПРИМЕЧАНИЕ: в C ++ 11 вы бы написали цикл выше как for( auto it: container) но это служит лучшей иллюстрацией.

11

auto полезно избегать ввода подробных имен, что вы обычно получаете с шаблонами. Но в целом шаблон выглядит так:

struct my_class_with_a_long_name { };

my_class_with_a_long_name foo()
{
my_class_with_a_long_name obj;
// ...
return obj;
}

int main()
{
auto myObj = foo();
}

Но речь идет не только о вводе меньшего количества символов, но и о консистенция. Если вы измените тип возврата fooВам не нужно будет явно менять также тип myObj,

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

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

2

Я полагаю, вы знаете, что std::vector<int> есть (в основном массив целых чисел с изменяемым размером).

Допустим, у вас есть только такой вектор, и вы хотите перебрать его элементы. Вот, auto очень пригодится:

std::vector<int> items;
...
for (auto iter = std::begin(items); iter != std::end(items); ++iter) {
// do something with `iter'
}

В то время как iter концептуально прост (это итератор), имеет несколько сложный тип (std::vector<int>::iterator). С помощью auto избавляет вас от необходимости разобрать тип. Это также облегчает изменение типа items в какой-то другой контейнер.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector