在“几乎总是自动”一文中,Herb Sutter 列出了使用 auto 关键字声明变量的几个原因。
他说,实际的变量类型可以由 IDE 自动推断,并通过将鼠标悬停在变量名上来显示。
我想知道目前哪些 IDE 和文本编辑器(或插件)支持“自动”变量类型推导。
编辑:
来自答案的 IDE 列表:
- 视觉工作室 201x
- 蚀
- Qt 创作者 2.7.0
- KDevelop 4.5.1
文本编辑器
Vim、Emacs、Sublime Text 等呢?有没有支持类型推断的插件?
Visual Studio 2010、Visual Studio 2012 和 Visual Studio 2013 支持对使用auto
关键字声明的变量进行类型推导。这适用于 IntelliSense 工具提示以及自动完成建议。
从 Visual Studio 2010 开始,C++ IntelliSense 支持完全重新设计(请参阅重建 Intellisense)。IntelliSense 现在由 Edison Design Group (EDG) C++ 编译器前端驱动。无论 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
鉴于我很乐意不同意 Herb Sutter 关于 IDE 足以在需要时推断出类型的评估。auto
在健壮性、正确性和灵活性方面非常出色,但它肯定无法满足开发人员在大型代码库上工作的需求。
注意:这个答案的初稿是通过简单地结合现有答案和 Eclipse 注释创建的,然后添加关于 Vim 的注释。如果没有这样的“综合”答案,这个问题(及其现有答案)似乎违反了“一个正确答案”规则。
这确实应该格式化为表格;太糟糕了,我们这里没有这种能力。
KDevelop 4.5.1还支持类型推导。虽然它可能会犯一些小错误。
例子:
auto i = 3; // Deduces int
auto d = 3.0; // Deduces double
auto f = 3.0f; // Deduces double - wrong
Qt Creator 2.7.0 也可以,从这个测试源代码来看:
class A
{
void f();
};
int main()
{
auto a = A();
return 0;
}