Цель ключевого слова "auto" в C - PullRequest
18 голосов
/ 17 мая 2010

Какова цель ключевого слова "auto" в C? С C ++ 0x это приобрело новое значение, но значит ли это, что мой код сломается, если я перенесу код C на компилятор C ++ 0x?

Ответы [ 5 ]

44 голосов
/ 17 мая 2010

Будет сломано, если ваш код содержит ключевое слово auto. За почти 30 лет программирования на C и C ++ я никогда не сталкивался с подобным. Ключевое слово было введено в первом компиляторе C, чтобы указать локальные переменные функции, но компиляторы почти сразу стали достаточно умными, чтобы не требовать его, и очень мало кода, который его использует, выживет сегодня - поэтому C ++ 0x решил его переработать, а не введите новое ключевое слово, которое будет вызывать проблемы с переносимостью.

Цель ключевого слова auto в C ++ 0X - позволить компилятору определить тип переменной, где это возможно:

vector <int> v;
auto it = v.begin():

компилятор может видеть, что v.begin () должен возвращать vector<int>::iterator и поэтому может создавать переменную этого типа, сохраняя при этом большую часть клавиатуры или создание typedef.

13 голосов
/ 17 мая 2010

Бьярн Страуструп упоминает в своем C ++ 0x FAQ о auto:

"Старое значение авто (" это локальная переменная ") является избыточной и неиспользованными. Несколько членов комитета пробились сквозь миллионы строк код найти только несколько применений - и большинство из них были в тестовых наборах или оказались ошибками. "

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

9 голосов
/ 17 мая 2010

В С auto указана длительность автоматического хранения (в отличие от static, extern, register). Поскольку это значение по умолчанию, я никогда не видел, чтобы auto использовался ни в одном коде. Я не сделал много C, хотя.

5 голосов
/ 17 мая 2010

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


AFAIK C ++ Использование 0x auto не противоречит традиционному использованию C auto. В C auto используется вместе с типом.

auto char c1 = 'a'; // OK, old meaning of auto is still valid
auto c2 = 'b'; // OK, new meaning of auto (deduce c2 is a char)

Единственное место, где он может изменить значение кода, - это когда auto использовалось вместе с неявным int правилом (если не указан тип -> это int), в котором case вторая строка в моем примере имела c2 типа int и теперь она имеет тип char.

2 голосов
/ 17 мая 2010

редко используется; это означало локальную переменную. Современные компиляторы, такие как VS2010 C ++, придают ему новое значение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...