草庐IT

c++ - constexpr 函数中的复合赋值 : gcc vs. clang

templateconstexprintf(Aa,Bb){a/=b;returna;}constexprintx=f(2,2);//a,b:intconstexprinty=f(2.,2.);//a,b:doubleconstexprintz=f(2,2.);//a:int,b:double//代码未在clang中编译,它会产生以下诊断信息:error:constexprvariable'z'mustbeinitializedbyaconstantexpressionMSVC崩溃(根据godbolt)并且gcc工作正常。如果a/=b被简单地替换为a=a/b那么每个人都接受它。为什么?谁

c++ - constexpr 函数中的复合赋值 : gcc vs. clang

templateconstexprintf(Aa,Bb){a/=b;returna;}constexprintx=f(2,2);//a,b:intconstexprinty=f(2.,2.);//a,b:doubleconstexprintz=f(2,2.);//a:int,b:double//代码未在clang中编译,它会产生以下诊断信息:error:constexprvariable'z'mustbeinitializedbyaconstantexpressionMSVC崩溃(根据godbolt)并且gcc工作正常。如果a/=b被简单地替换为a=a/b那么每个人都接受它。为什么?谁

c++ - 链接 gcc 6、gcc 7 和 gcc 8 对象是否安全?

IsitsafetolinkC++17,C++14,andC++11objects询问有关链接使用不同语言标准编译的对象的问题,JonathanWakely对该问题的出色回答解释了gcc/libstdc++为确保其有效而做出的ABI稳定性promise。还有一件事可以在gcc版本之间改变-通过-fabi-version的语言ABI.假设,为简单起见,我有三个目标文件:foo.o,用gcc6.5c++14编译bar.o,用gcc7.4c++14编译quux.o,用gcc8.3c++17编译全部使用各自的默认语言ABI(即10、11和13)。根据链接的答案,从库的角度来看,将这些对象链接在

c++ - 链接 gcc 6、gcc 7 和 gcc 8 对象是否安全?

IsitsafetolinkC++17,C++14,andC++11objects询问有关链接使用不同语言标准编译的对象的问题,JonathanWakely对该问题的出色回答解释了gcc/libstdc++为确保其有效而做出的ABI稳定性promise。还有一件事可以在gcc版本之间改变-通过-fabi-version的语言ABI.假设,为简单起见,我有三个目标文件:foo.o,用gcc6.5c++14编译bar.o,用gcc7.4c++14编译quux.o,用gcc8.3c++17编译全部使用各自的默认语言ABI(即10、11和13)。根据链接的答案,从库的角度来看,将这些对象链接在

c++ - GCC 打开枚举,保留缺少的警告但使用默认值

使用GCC,如果您在enum值上switch并且其中一个枚举缺少case语句,则会发出警告。当您添加default项时,将不再发出警告,这在一般情况下是有意义的。有没有办法使用default语句,如果没有覆盖所有enum值,仍然会发出警告?由于我的函数可能处理不纯的输入,我想涵盖通用情况,但仍然会收到有关缺少枚举情况的编译器警告。目前我最终在switch语句之后分配了一个默认值。 最佳答案 -Wswitch-enum,但不幸的是,只有最新版本支持此功能。(您当然可以通过在开关外使用goto并省略默认值来模拟您想要的行为,但我强烈建议

c++ - GCC 打开枚举,保留缺少的警告但使用默认值

使用GCC,如果您在enum值上switch并且其中一个枚举缺少case语句,则会发出警告。当您添加default项时,将不再发出警告,这在一般情况下是有意义的。有没有办法使用default语句,如果没有覆盖所有enum值,仍然会发出警告?由于我的函数可能处理不纯的输入,我想涵盖通用情况,但仍然会收到有关缺少枚举情况的编译器警告。目前我最终在switch语句之后分配了一个默认值。 最佳答案 -Wswitch-enum,但不幸的是,只有最新版本支持此功能。(您当然可以通过在开关外使用goto并省略默认值来模拟您想要的行为,但我强烈建议

c++ - 使 GCC 和其他 C++ 编译器非常严格

我正在开发一个大型协作C++项目,该项目在各种Linux、OSX和Windows上开发和运行。我们使用GCC、VisualStudioC++和英特尔C++编译器在这些平台上进行编译。随着越来越多的人开始为项目开发代码,我们开始在编译和运行时看到奇怪的错误,这些错误是特定于特定操作系统上的特定编译器的。这方面的一个例子是隐含包含某些OS/编译器对似乎为您找到的header,意外地从派生类的基类中重载了函数。我的目标是让GCC上的编译更加严格,并在所有平台上捕获更多错误,这样我们就不会一直遇到这些问题。以下是我正在考虑尝试使用GCC的标志列表,这些标志是通过Google和GCC手册页找到的

c++ - 使 GCC 和其他 C++ 编译器非常严格

我正在开发一个大型协作C++项目,该项目在各种Linux、OSX和Windows上开发和运行。我们使用GCC、VisualStudioC++和英特尔C++编译器在这些平台上进行编译。随着越来越多的人开始为项目开发代码,我们开始在编译和运行时看到奇怪的错误,这些错误是特定于特定操作系统上的特定编译器的。这方面的一个例子是隐含包含某些OS/编译器对似乎为您找到的header,意外地从派生类的基类中重载了函数。我的目标是让GCC上的编译更加严格,并在所有平台上捕获更多错误,这样我们就不会一直遇到这些问题。以下是我正在考虑尝试使用GCC的标志列表,这些标志是通过Google和GCC手册页找到的

c++ - 为什么 lambda 参数的默认参数会触发“-pedantic”GCC 警告?

我的代码中某处有这个lambda:[](boola,bool=true){return!a;}}和GCC4.6“提示”这个警告:warning:defaultargumentspecifiedforlambdaparameter[-pedantic]当您不知道为什么这是“坏的”时,这非常无用。我查阅了FDISn3290并没有在5.1.2Lambda表达式中找到关于默认参数和lambda的任何内容。更新:我提交了错误报告here.UPDATE2:好的,从现在开始我使用-pedantic-errors。-pedantic只发出警告,而不发出错误。 最佳答案

c++ - 为什么 lambda 参数的默认参数会触发“-pedantic”GCC 警告?

我的代码中某处有这个lambda:[](boola,bool=true){return!a;}}和GCC4.6“提示”这个警告:warning:defaultargumentspecifiedforlambdaparameter[-pedantic]当您不知道为什么这是“坏的”时,这非常无用。我查阅了FDISn3290并没有在5.1.2Lambda表达式中找到关于默认参数和lambda的任何内容。更新:我提交了错误报告here.UPDATE2:好的,从现在开始我使用-pedantic-errors。-pedantic只发出警告,而不发出错误。 最佳答案