2016-01-13 10 views
1

Прочитав это сообщение: Is there a downside to declaring variables with auto in C++? Я спрашивал себя: на самом деле никто из ответчиков не знает о auto, не являясь типом, но спецификатором класса хранения.Авто делает что-то совершенно другое в C++, как в C?

or is auto c C++ 11 что-то другое как спецификатор класса хранения в plain C?

Если да, то это нарушает совместимость между C и C++?

(Я знаю, что они никогда не поддерживали друг друга, но мой опыт состоял в том, что комитет C++ старался оставаться как можно ближе к C, когда это было приемлемо. Но теперь изменение устаревшего, но abyway существующее ключевое слово, а не просто добавление нового. Почему здесь выполняется такой разрыв последовательности?)

+8

Значение ключевого слова 'auto' изменено в C++ 11, оно больше не является классом хранения, но используется для вывода типа. –

+2

его первый раз, когда я слышал о 'auto' в C, поэтому мне было любопытно и нашел этот [ответ] (http://stackoverflow.com/a/2192761/4117728), который в основном утверждает, что в C вы на самом деле никогда не используете ключевое слово. Таким образом, я думаю, что это не такая уж большая проблема, что C++ 11 изменил ее значение. – user463035818

+1

Это действительно замедленное решение. Почему бы просто не придумать новое ключевое слово? – Lundin

ответ

8

Начиная с C++ 11 auto означает вывести тип. Он был использован, потому что добавление нового ключевого слова привело бы к разрыву большего числа программ на C++. В качестве спецификатора хранилища auto бесполезен, поскольку он по умолчанию, если спецификатор не добавлен.

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