我在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中,选项卡不会自动关闭?
答案 0 :(得分:0)
visual studio和codeblocks之间的真正区别在于visual studio使用自己的vc ++编译器,而codeblocks使用mingw gcc,这是一个gcc到windows的端口。
将您的参数声明为auto
会使您的函数成为泛型函数,这已经提出了一段时间,但还没有进入标准。标准允许的auto作为函数参数的唯一用例是lambda函数(c ++ 14,generic lambdas)
通用函数基本上是函数模板的简写,语法较简洁。