哪些 IDE 和文本编辑器可以推断出在 C++11 中使用 auto 关键字声明的变量类型
Which IDEs and text editors can deduce type of variables declared using auto keyword in C++11
在"几乎总是自动"一文中,Herb Sutter列出了使用auto关键字声明变量的几个原因。
他说,实际的变量类型可以通过IDE自动推断,并通过将鼠标悬停在变量名称上来显示。
我想知道哪些 IDE 和文本编辑器(或插件)目前支持"自动"变量类型推断。
编辑:
答案中的 IDE 列表:
- Visual Studio 201x
- 日蚀
- Qt 创建者 2.7.0
- KDevelop 4.5.1
文本编辑器
那么 Vim、Emacs、Sublime Text 等呢——有没有支持类型推导的插件?
2012 和 Visual Studio 2013 支持使用 auto
关键字声明的变量的类型推导。这既适用于智能感知工具提示,也适用于自动完成建议。
从 Visual Studio 2010 开始,C++ IntelliSense 支持被完全重新设计(请参阅重建 Intellisense)。IntelliSense现在由Edison Design Group(EDG)C++编译器前端驱动。无论EDG能做什么,你都会在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
在健壮性、正确性和灵活性方面都很棒,但它肯定无法满足开发人员在大型代码库上工作的需求。
原生支持
- Visual Studio 2010+
- 警告:使用 typedefs 表现得不是很好;请参阅 iinspectable 的答案
- KDevelop 4.5.1+
- 警告:一些不正确的推论(例如浮动文字);参见约翰尼的答案
- Qt创建者 2.7.0+
- Eclipse(不确定是通过插件还是本机)
通过插件提供支持
- Vim插件:
- YCM(自合并此拉取请求以来:https://github.com/Valloric/ycmd/pull/88)
- 别人?也许是合成的?
- Emacs 插件:
- ....肯定在某处有这样的插件。
注意:这个答案的初稿是通过简单地将现有答案加上 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;
}
- C++/11 auto 关键字是在更有效时推导参数进行按引用传递,还是始终按值传递?
- auto 关键字在 Dev c++ 中不起作用
- 为什么我需要明确编写"auto"关键字?
- 在C++中使用 auto 关键字
- 在 VS Code 中编码时不能在 C++ 中使用 auto 关键字
- 避免使用 auto 关键字从字面上复制 const 和非 const 的代码?
- 省略C++可变参数 lambda 中的"auto"关键字?
- 我可以在动态知道其类型的模板类对象中使用 auto 关键字吗?我不能在没有初始值设定项的情况下使用 auto 关键字吗?
- 使用 auto 关键字初始化字符数组
- auto*在编译时有用吗?auto关键字足够了吗
- lambda 中的跨平台"auto"关键字用法:integral_constant作为函数参数
- 使用 C++11 auto 关键字声明两个(或多个)变量
- C++11: "auto"关键字会检索到cv限定符吗?我有矛盾的样本
- 为什么 auto 关键字不能与指向函数的指针的初始化列表一起使用?
- 遍历多维向量(使用 Auto 关键字?
- 返回指向 const 数据成员和 'auto' 关键字的 const 指针。有点困惑
- 使用 auto 关键字时不遵守对齐方式 16
- 使用auto关键字填充双索引向量
- C++11中的auto关键字奇怪行为
- 在 C++ 中使用 Lambda 表达式和 auto 关键字时出现问题