Подтвердить что ты не робот

Цель ключевого слова C "auto"

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

4b9b3361

Ответ 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 С++, дают новый смысл.