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