Цель C “автоматическое” ключевое слово

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

18
задан Lennie De Villiers 17 May 2010 в 08:08
поделиться

5 ответов

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

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

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

13
ответ дан 30 November 2019 в 05:47
поделиться

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

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

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

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

44
ответ дан 30 November 2019 в 05:47
поделиться

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

9
ответ дан 30 November 2019 в 05:47
поделиться

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

2
ответ дан 30 November 2019 в 05:47
поделиться

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


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.

5
ответ дан 30 November 2019 в 05:47
поделиться