Какова цель ключевого слова "auto" в C? С С++ 0x это приобрело новый смысл, но означает ли это, что мой код сломается, если я передам код C на компилятор С++ 0x?
Цель ключевого слова C "auto"
Ответ 1
Bjarne Stroustrup упоминает в своем С++ 0x FAQ о auto
:
"Старое значение auto (" это локальная переменная ") является избыточным и неиспользованными. Несколько членов комитета тралились через миллионы линий код, обнаруживающий только несколько применений - и большинство из них были в наборах тестов или оказались ошибками".
Поэтому я предполагаю, что компиляторы не будут вынуждены стандартом реализовать старый смысл auto
.
Ответ 2
Он сломается, если ваш код содержит ключевое слово auto
. За почти 30 лет программирования на C и С++ я никогда не сталкивался с тем, что делал. Ключевое слово было введено в первом компиляторе C, чтобы указать локальные переменные функции, но компиляторы почти сразу стали достаточно умными, чтобы не требовать этого, и очень маленький код, который его использует, выживет сегодня - поэтому С++ 0x решил переработать его, а не введите новое ключевое слово, которое вызовет проблемы с переносимостью.
Цель ключевого слова auto в С++ 0X - разрешить компилятору выработать тип переменной, где это возможно:
vector <int> v;
auto it = v.begin():
компилятор может видеть, что v.begin() должен возвращать vector<int>::iterator
и поэтому может создавать переменную этого типа, сохраняя много клавиш или создание typedef.
Ответ 3
В C, auto
указанная продолжительность автоматического хранения (в отличие от static
, extern
, register
). Поскольку это значение по умолчанию, я никогда не видел auto
, используемого в любом коде. Я не сделал много C, хотя.
Ответ 4
Этот ответ неверен, см. следующий вопрос, я оставляю здесь ответ как ссылку.
AFAIK С++ 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)
Единственное место, где он может изменить смысл кода, - это когда авто было использовано вместе с неявным правилом int
(если не указано тип → it a int
), и в этом случае вторая строка в моей пример имел c2
типа int
, а теперь это тип char
.
Ответ 5
Он редко используется; это означало локальную переменную. Современные компиляторы, такие как VS2010 С++, дают новый смысл.