草庐IT

c++ - 可以在 C++14 constexpr 函数中使用 for 循环实例化模板吗?

我一直在使用SVN构建的clang来试验constexpr的宽松规则。.到目前为止,我还无法确定的一件事是,是否可以在编译时在constexpr函数中循环遍历元组内的元素。因为我没有C++14兼容的标准库可供测试,所以我准备了以下等效测试:templateconstexprintfoo(){returnN;}constexprintgetSum(){autosum=0;for(autoi=0;i();}returnsum;}constexprautosum=getSum();这里有趣的部分是foo().在非constexpr函数中,我希望它无法编译,因为您根本无法使用运行时int来生成

c++ - 可以在 C++14 constexpr 函数中使用 for 循环实例化模板吗?

我一直在使用SVN构建的clang来试验constexpr的宽松规则。.到目前为止,我还无法确定的一件事是,是否可以在编译时在constexpr函数中循环遍历元组内的元素。因为我没有C++14兼容的标准库可供测试,所以我准备了以下等效测试:templateconstexprintfoo(){returnN;}constexprintgetSum(){autosum=0;for(autoi=0;i();}returnsum;}constexprautosum=getSum();这里有趣的部分是foo().在非constexpr函数中,我希望它无法编译,因为您根本无法使用运行时int来生成

C++1y/C++14 : Assignment to object outside its lifetime is not allowed in a constant expression?

根据当前草案,以下C++14/C++1y程序是否格式错误?#includetemplatestructliteral_array{Tdata[n];};templateconstexprliteral_arrayoperator+(literal_arraya,literal_arrayb){literal_arrayx;for(size_ti=0;ia={1,2,3};constexprliteral_arrayb={4,5};constexprautoc=a+b;}Clangtrunk(在撰写本文时)给出:error:constexprvariable'c'mustbeinitia

C++1y/C++14 : Assignment to object outside its lifetime is not allowed in a constant expression?

根据当前草案,以下C++14/C++1y程序是否格式错误?#includetemplatestructliteral_array{Tdata[n];};templateconstexprliteral_arrayoperator+(literal_arraya,literal_arrayb){literal_arrayx;for(size_ti=0;ia={1,2,3};constexprliteral_arrayb={4,5};constexprautoc=a+b;}Clangtrunk(在撰写本文时)给出:error:constexprvariable'c'mustbeinitia

c++ - C++14 将基于哪个 C 标准?

C标准的哪个版本是C++14的基础?C++11基于C99,比C11早几个月发布。C++14会基于C11吗?currentdraft仍然(截至2013年12月)似乎在说“基于ISO/IEC9899:1999”,即C99,我反复听说C++14“几乎完成”并且此时只进行了微小的调整。在新标准投票之前修改对C的依赖是否合理? 最佳答案 至少在当前的C++标准草案中写到其规范性文件包括—ISO/IEC9899:1999,Programminglanguages—C—ISO/IEC9899:1999/Cor.1:2001(E),Programm

c++ - C++14 将基于哪个 C 标准?

C标准的哪个版本是C++14的基础?C++11基于C99,比C11早几个月发布。C++14会基于C11吗?currentdraft仍然(截至2013年12月)似乎在说“基于ISO/IEC9899:1999”,即C99,我反复听说C++14“几乎完成”并且此时只进行了微小的调整。在新标准投票之前修改对C的依赖是否合理? 最佳答案 至少在当前的C++标准草案中写到其规范性文件包括—ISO/IEC9899:1999,Programminglanguages—C—ISO/IEC9899:1999/Cor.1:2001(E),Programm

c++ - 是否有针对 C++14 或更高版本的标准化回溯和其他调试实用程序的计划?

是否有计划将标准化的回溯和其他调试实用程序添加到C++14(或更高版本)中,还是会继续作为操作系统或编译器添加的功能? 最佳答案 没有。没有计划。一方面,标准没有指定如何进行函数调用。实际上,这取决于硬件。您可能不知道这一点,但是那里的硬件不会将返回地址推送到堆栈上。其中一些使用动态jmp指令,而另一些则使用返回队列来跟踪返回地址。您所指的堆栈跟踪可能在处理器的一个子集上(尽管很大),但是由于C和C++旨在在尽可能多的处理器上运行,因此它不会也不能定义标准方式执行回溯,这将决定硬件的制造方式。

c++ - 是否有针对 C++14 或更高版本的标准化回溯和其他调试实用程序的计划?

是否有计划将标准化的回溯和其他调试实用程序添加到C++14(或更高版本)中,还是会继续作为操作系统或编译器添加的功能? 最佳答案 没有。没有计划。一方面,标准没有指定如何进行函数调用。实际上,这取决于硬件。您可能不知道这一点,但是那里的硬件不会将返回地址推送到堆栈上。其中一些使用动态jmp指令,而另一些则使用返回队列来跟踪返回地址。您所指的堆栈跟踪可能在处理器的一个子集上(尽管很大),但是由于C和C++旨在在尽可能多的处理器上运行,因此它不会也不能定义标准方式执行回溯,这将决定硬件的制造方式。

c++ - 尽管使用了 C++14 功能,为什么使用 C++11 编译成功?

GCCv6.1(结果与v5.1相同)成功编译下面带有标志-std=c++11-Wall-Wextra-Wpedantic的代码,但产生此警告:variabletemplatesonlyavailablewith-std=c++14or-std=gnu++14代码:#includetemplatestructParamMetadata{Tmin;Tmax;};templateclassFooMap{};template//WARNINGPRODUCEDONTHISLINEexternFooMap>metadataHashmap;intmain(){return0;}Clangv3.8会产

c++ - 尽管使用了 C++14 功能,为什么使用 C++11 编译成功?

GCCv6.1(结果与v5.1相同)成功编译下面带有标志-std=c++11-Wall-Wextra-Wpedantic的代码,但产生此警告:variabletemplatesonlyavailablewith-std=c++14or-std=gnu++14代码:#includetemplatestructParamMetadata{Tmin;Tmax;};templateclassFooMap{};template//WARNINGPRODUCEDONTHISLINEexternFooMap>metadataHashmap;intmain(){return0;}Clangv3.8会产