【问题标题】:Which IDEs and text editors can deduce type of variables declared using auto keyword in C++11哪些 IDE 和文本编辑器可以推断在 C++11 中使用 auto 关键字声明的变量类型
【发布时间】:2013-11-06 15:41:34
【问题描述】:

"Almost always auto" 文章中,Herb Sutter 列出了使用 auto 关键字声明变量的几个原因。

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

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

编辑:

来自答案的 IDE 列表:

  • Visual Studio 201x
  • 日食
  • Qt Creator 2.7.0
  • KDevelop 4.5.1

文本编辑器

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

【问题讨论】:

标签: c++ c++11 ide editor auto


【解决方案1】:

Visual Studio 2010、Visual Studio 2012 和 Visual Studio 2013 支持对使用 auto 关键字声明的变量进行类型推导。这适用于 IntelliSense 工具提示以及自动完成建议。

从 Visual Studio 2010 开始,对 C++ IntelliSense 支持进行了完全重新设计(请参阅Rebuilding Intellisense)。 IntelliSense 现在由 Edison Design Group (EDG) C++ compiler frontend 驱动。无论 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 在健壮性、正确性和灵活性方面非常出色,但它肯定无法满足开发人员在大型代码库上工作的需求。

【讨论】:

    【解决方案2】:

    原生支持

    • Visual Studio 2010+
      • 警告:在使用 typedef 时表现不佳;查看 iinspectable 的回答
    • KDevelop 4.5.1+
      • 警告:一些不正确的推论(例如浮点字面量);见约翰尼的回答
    • Qt Creator 2.7.0+
    • Eclipse(不确定是通过插件还是原生)

    通过插件支持


    注意:这个答案的初稿是通过简单地结合现有答案和 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;
        }
        

        【讨论】:

        • 小注:我检查了 Qt Creator,它知道变量类型并且它提供方法/属性的自动完成,但是当您将鼠标悬停在变量名称上时,它不会给您类型变量(它适用于没有自动声明的变量)。
        • 另一个注意事项,尽管这是一个旧线程,但 Qt Creator 不支持内置类型的自动完成(任何标准容器都不会提供自动完成)也不支持 Qt 类型。仅适用于用户定义的类型(使用 Qt Creator 3.2 RC1 测试)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        相关资源
        最近更新 更多