Какие IDE и текстовые редакторы могут выводить тип переменных, объявленных с использованием ключевого слова auto в С++ 11
В "Почти всегда авто" статья Herb Sutter перечисляет несколько причин для объявления переменных с помощью автоматического ключевого слова.
Он говорит, что фактический тип переменной может быть автоматически выведен IDE и показан путем зависания над именем переменной.
Я хотел бы знать, какие IDE и текстовые редакторы (или плагины) в настоящее время поддерживают "автоматический" вывод типа переменной.
Edit:
Список IDE из ответов:
- Visual Studio 201x
- Eclipse,
- Qt Creator 2.7.0
- KDevelop 4.5.1
Текстовые редакторы
Как насчет Vim, Emacs, Sublime Text и т.д. - есть ли плагины, которые поддерживают вывод типа?
Ответы
Ответ 1
Visual Studio 2010, Visual Studio 2012 и Visual Studio 2013 поддерживают вывод типа для переменных, объявленных с ключевым словом auto
. Это относится как к подсказкам IntelliSense, так и к предложениям автозаполнения.
Начиная с Visual Studio 2010 поддержка С++ IntelliSense была полностью переработана (см. Восстановление Intellisense). IntelliSense теперь управляется Edison Design Group (EDG) интерфейсом компилятора С++. Независимо от того, что может сделать EDG, вы увидите отражение в IntelliSense.
Обратите внимание, что всплывающие подсказки IntelliSense будут отображать базовый тип для переменных auto
. Он не будет обрабатывать дерево снова и заменяет части соответствующими typedef. В Visual Studio 2012 следующий код
std::string str;
std::string::iterator i1 = str.begin();
auto i2 = str.begin();
отобразит итераторы как
std::basic_string<char,std::char_traits<char>,std::allocator<char> >::iterator i1
и
std::_String_iterator<std::_String_val<std::_String_base_types<char,std::allocator<char> >::_Val_types>::_Myt> i2
Учитывая, что я бы с удовольствием не соглашался с Хербом Саттером о его оценке того, что IDE достаточно, чтобы вывести тип, когда вам это нужно. auto
отлично по отношению к надежности, правильности и гибкости, но, конечно же, не соответствует потребностям разработчиков, работающих на большой базе кода.
Ответ 2
Встроенная поддержка
- Visual Studio 2010+
- Предостережение: не очень хорошо работает с typedefs; см. iинспективный ответ
- KDevelop 4.5.1+
- Предостережение: некоторые неправильные вычеты (например, плавающие литералы); см. ответ Джонни
- Qt Creator 2.7.0 +
- Eclipse (не уверен, что через плагин или родной)
Поддержка через плагины
- Плагины Vim:
- Плагины Emacs:
- .... ЖЕСТКО есть такой плагин где-то.
Примечание: первый черновик этого ответа был создан простым объединением существующих ответов плюс комментарий Eclipse, а затем добавлением заметки о Vim. Без такого "совокупного" ответа этот вопрос (и его существующие ответы), по-видимому, нарушает правило "одного правильного ответа".
Это действительно должно быть отформатировано как таблица; слишком плохо, что у нас нет этой возможности.
Ответ 3
KDevelop 4.5.1 также поддерживает вывод типа. Хотя это, вероятно, делает небольшие ошибки.
Примеры:
auto i = 3; // Deduces int
auto d = 3.0; // Deduces double
auto f = 3.0f; // Deduces double - wrong
Ответ 4
Qt Creator 2.7.0 тоже может это сделать, судя по этому исходному коду тестирования:
class A
{
void f();
};
int main()
{
auto a = A();
return 0;
}