CodeBlocks与Visual Studio对同一代码的反应不同

时间:2018-02-08 19:50:28

标签: c++ ide

我在CodeBlocks(使用C ++ 14)和Visual Studio 2015

上测试了这段代码
#include <iostream>

void sum(auto a, auto b)
{
std::cout << a + b;
}

int main()
{
sum(11, 5);
}

在代码块中,它通常编译和输出16。 在Visual Studio中,我收到错误

  Error C3533   a parameter cannot have a type that contains 'auto'

我想知道为什么编译器对同一种语言的反应不同。另外,为什么需要std :: cin.get()来保持在Visual Studio中打开选项卡,而在Codeblocks中,选项卡不会自动关闭?

1 个答案:

答案 0 :(得分:0)

visual studio和codeblocks之间的真正区别在于visual studio使用自己的vc ++编译器,而codeblocks使用mingw gcc,这是一个gcc到windows的端口。

将您的参数声明为auto会使您的函数成为泛型函数,这已经提出了一段时间,但还没有进入标准。标准允许的auto作为函数参数的唯一用例是lambda函数(c ++ 14,generic lambdas)

然而,gcc确实对此作为扩展实现了支持,因为在添加它之前只考虑时间问题。 Vc ++尚未完成此操作。希望我们能在c ++ 20中看到这个功能。

通用函数基本上是函数模板的简写,语法较简洁。