草庐IT

C++14 警告 : too many template headers for variable (should be 0)

在尝试最近的g++-5编译器时,我在一个文件中写了以下语句:templateTa;templateinta=1;结果:warning:toomanytemplateheadersfora(shouldbe0)同样有效,它并没有真正专门化a.例如templateTa;templateinta=1;intmain(){std::cout这个语法有什么奥秘? 最佳答案 模板参数只能在function模板的显式特化中被省略。你有一个变量模板,所以你必须包含:templateinta=1;引用C++14(n4140),14.7.3/10(强调

C++14 警告 : too many template headers for variable (should be 0)

在尝试最近的g++-5编译器时,我在一个文件中写了以下语句:templateTa;templateinta=1;结果:warning:toomanytemplateheadersfora(shouldbe0)同样有效,它并没有真正专门化a.例如templateTa;templateinta=1;intmain(){std::cout这个语法有什么奥秘? 最佳答案 模板参数只能在function模板的显式特化中被省略。你有一个变量模板,所以你必须包含:templateinta=1;引用C++14(n4140),14.7.3/10(强调

c++ - gcc 编译选项 std=c++1y 和 std=c++14 的区别

我安装了gcc4.9.2。我使用以下命令编译了程序:/root/gcc-4.9.2/bin/g++-std=c++1ytesting.cpp请注意,除了选项-std=c++1y之外,还有另一个选项-std=c++14。编译器会以相同的方式工作并为两个选项生成完全相同的可执行文件吗? 最佳答案 C++14是最新的ISO标准,除非你需要一些gcc非标准特性,否则应该使用它。c++1y是在c++14标准完成之前用来指代它的名称,因此它很可能遵循标准草案,但不是实际标准本身。两者之间可能存在一些细微差别,但c++14是ISO标准。简而言之,

c++ - gcc 编译选项 std=c++1y 和 std=c++14 的区别

我安装了gcc4.9.2。我使用以下命令编译了程序:/root/gcc-4.9.2/bin/g++-std=c++1ytesting.cpp请注意,除了选项-std=c++1y之外,还有另一个选项-std=c++14。编译器会以相同的方式工作并为两个选项生成完全相同的可执行文件吗? 最佳答案 C++14是最新的ISO标准,除非你需要一些gcc非标准特性,否则应该使用它。c++1y是在c++14标准完成之前用来指代它的名称,因此它很可能遵循标准草案,但不是实际标准本身。两者之间可能存在一些细微差别,但c++14是ISO标准。简而言之,

c++ - 哪个草案最接近 C++14 标准?

我在很多地方都看到过N3690、N4140和N4296。我猜它是N4140,因为它是在2014年底发布的。N4296似乎有C++14中没有的东西,比如折叠表达式。 最佳答案 N3690是C++14的旧委员会草案;从那以后发生了巨大的变化(例如,删除了和),除了标准考古学之外,它不应该用于任何其他用途。N3936是为最终投票发送的版本(嗯,实际发送的版本是N3937,但区别基本上是精美的封面)。那,还有一些minoreditorialfixes,变成了C++14IS。N4140对C++14的影响相当于N3337对C++11-C++14

c++ - 哪个草案最接近 C++14 标准?

我在很多地方都看到过N3690、N4140和N4296。我猜它是N4140,因为它是在2014年底发布的。N4296似乎有C++14中没有的东西,比如折叠表达式。 最佳答案 N3690是C++14的旧委员会草案;从那以后发生了巨大的变化(例如,删除了和),除了标准考古学之外,它不应该用于任何其他用途。N3936是为最终投票发送的版本(嗯,实际发送的版本是N3937,但区别基本上是精美的封面)。那,还有一些minoreditorialfixes,变成了C++14IS。N4140对C++14的影响相当于N3337对C++11-C++14

c++ - <cmath> 在 C++14/C++11 的 <math.h> 中隐藏 isnan?

我这里有一个使用isnan的小型测试应用程序来自:#include#includeintmain(){doubled=NAN;std::cout在3种不同的标准下构建和运行:$g++-std=c++98main.cpp;./a.out1$g++-std=c++11main.cpp;./a.out1$g++-std=c++14main.cpp;./a.out1现在我们还包括,并同时使用isnan进行测试和std::isnan:#include#include#includeintmain(){doubled=NAN;std::cout构建并运行:C++98作品$g++-std=c++98

c++ - <cmath> 在 C++14/C++11 的 <math.h> 中隐藏 isnan?

我这里有一个使用isnan的小型测试应用程序来自:#include#includeintmain(){doubled=NAN;std::cout在3种不同的标准下构建和运行:$g++-std=c++98main.cpp;./a.out1$g++-std=c++11main.cpp;./a.out1$g++-std=c++14main.cpp;./a.out1现在我们还包括,并同时使用isnan进行测试和std::isnan:#include#include#includeintmain(){doubled=NAN;std::cout构建并运行:C++98作品$g++-std=c++98

c++ - 取消引用具有默认参数的函数 - C++14 与 C++11

以下代码无法使用带有选项-std=c++1y的g++5.4.0版进行编译:voidf(int=0);intmain(){f();//ok(*f)(2);//ok(*f)();//okc++11;errorwithc++14:toofewargumentstofunctionreturn0;}声明为具有默认参数的函数,那么这里有什么问题?感谢您的帮助。为什么g++-c-std=c++11会编译? 最佳答案 接受(*f)()为有效是GCC错误。标准的字母表示使用带有一元*的函数名应该导致函数名衰减为指针。然后应该取消引用指针以获得调用表

c++ - 取消引用具有默认参数的函数 - C++14 与 C++11

以下代码无法使用带有选项-std=c++1y的g++5.4.0版进行编译:voidf(int=0);intmain(){f();//ok(*f)(2);//ok(*f)();//okc++11;errorwithc++14:toofewargumentstofunctionreturn0;}声明为具有默认参数的函数,那么这里有什么问题?感谢您的帮助。为什么g++-c-std=c++11会编译? 最佳答案 接受(*f)()为有效是GCC错误。标准的字母表示使用带有一元*的函数名应该导致函数名衰减为指针。然后应该取消引用指针以获得调用表