哪些 IDE 和文本编辑器可以推断出在 C++11 中使用 auto 关键字声明的变量类型

Which IDEs and text editors can deduce type of variables declared using auto keyword in C++11

本文关键字:auto 关键字 声明 类型 变量 C++11 文本 IDE 文本编辑 编辑器 推断出      更新时间:2023-10-16

在"几乎总是自动"一文中,Herb Sutter列出了使用auto关键字声明变量的几个原因。

他说,实际的变量类型可以通过IDE自动推断,并通过将鼠标悬停在变量名称上来显示。

我想知道哪些 IDE 和文本编辑器(或插件)目前支持"自动"变量类型推断。

编辑:

答案中的 IDE 列表:

  • Visual Studio 201x
  • 日蚀
  • Qt 创建者 2.7.0
  • KDevelop 4.5.1

文本编辑器

那么 Vim、Emacs、Sublime Text 等呢——有没有支持类型推导的插件?

Visual Studio 2010、Visual Studio

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;
}