13

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

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

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

编辑:

来自答案的 IDE 列表:

  • 视觉工作室 201x
  • Qt 创作者 2.7.0
  • KDevelop 4.5.1

文本编辑器

Vim、Emacs、Sublime Text 等呢?有没有支持类型推断的插件?

4

4 回答 4

8

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在健壮性、正确性和灵活性方面非常出色,但它肯定无法满足开发人员在大型代码库上工作的需求。

于 2013-10-28T00:05:48.700 回答
2

原生支持

  • 视觉工作室 2010+
    • 警告:使用 typedef 时表现不佳;见 iinspectable 的回答
  • KDevelop 4.5.1+
    • 警告:一些不正确的推论(例如浮动文字);见约翰尼的回答
  • Qt Creator 2.7.0+
  • Eclipse(不确定是通过插件还是原生)

通过插件支持

  • Vim 插件:
    • YCM(因为合并了这个拉取请求:https ://github.com/Valloric/ycmd/pull/88 )
    • 其他的?合成的,也许?
  • Emacs 插件:
    • ....肯定有这样的插件。

注意:这个答案的初稿是通过简单地结合现有答案和 Eclipse 注释创建的,然后添加关于 Vim 的注释。如果没有这样的“综合”答案,这个问题(及其现有答案)似乎违反了“一个正确答案”规则。

这确实应该格式化为表格;太糟糕了,我们这里没有这种能力。

于 2015-03-07T00:05:14.093 回答
1

KDevelop 4.5.1还支持类型推导。虽然它可能会犯一些小错误。

例子:

auto i = 3;    // Deduces int
auto d = 3.0;  // Deduces double
auto f = 3.0f; // Deduces double - wrong
于 2013-10-28T11:01:12.393 回答
0

Qt Creator 2.7.0 也可以,从这个测试源代码来看:

class A
{
    void f();
};

int main()
{
    auto a = A();
    return 0;
}
于 2013-10-28T00:09:57.180 回答