草庐IT

c++ - 当重载具有多重继承的函数时,GCC 说调用它是不明确的,但 Clang 和 MSVC 没有

我正在使用这个变体库:https://github.com/cbeck88/strict-variant.它提供了一个类似于std::variant和boost::variant的类。鉴于此struct:structS{explicitS(double){}};我想这样做:strict_variant::variantv=2.0;这适用于Clang5.0.1和MSVC19.12.25831.00,但无法使用GCC7.2.1进行编译。我查看了库的代码并将问题简化为:#includestructS{constexprS(){}constexprexplicitS(double){}};te

c++ - 为什么在 gcc 中允许带有 std::string 的模板化 constexpr?

为什么gcc允许编译模板版本?它是编译器错误还是与模板一起使用时实际上有效?有人可以给我解释一下吗?它不能在clang或godbolt.org上使用的其他编译器上编译。编译错误是由在constexpr中使用的字符串和字符串流产生的。#include#include#includetemplateconstexprstd::stringfunc1(Ta,Tb)//Compilesandruns{std::stringstreamss;ss 最佳答案 GCC可能就在这里。根据dcl.constexpr第6段:Iftheinstantia

c++ - gcc 4.7.1 是否支持线程?

我遵循了说明here关于设置CodeBlocks以使用GCC4.7.1。我提到的页面上提供的示例编译得很好,但是当我尝试编译以下代码时,它随后产生了错误。我必须说我什至将编译器设置为C++11标志通过编译器设置(-std=c++11)但仍然没有运气。编译失败的代码:#include#include#include//Thisfunctionwillbecalledfromathreadvoidfunc(inttid){std::coutth;intnr_threads=10;//Launchagroupofthreadsfor(inti=0;i错误:main.cpp||Infuncti

c++ - GitHub 上的项目需要带有 Qt4、sqlite3、cmake、git、gcc 的托管 CI 服务器

我主持了mycode(用C++编写)在GitHub上,并希望将其链接到托管持续集成(CI)服务器,如TravisCI或BuildHive.然后我希望在我的项目页面上看到“构建通过”或“构建失败”。但是当我检查这两个服务的CI环境时,TravisCI最接近gcc、git、cmake和sqlite3的可用性,但我缺少另一个关键库Qt4,它是构建我的项目所必需的。它也应该是免费的,因为它是一个免费的开源项目。请告诉我该怎么做?谢谢。我需要:gcc、git、cmake、sqlite3和Qt4。 最佳答案 下面的.travis.yml解决了我

c++ - qmake:处理 gcc 和 msvc 的选项

我想制作一个可以同时使用msvc和gcc的项目文件。例如,要优化速度,您可以执行cl/O2和g++-O3。但我不知道如何告诉项目文件来产生差异。我想要这样的东西:msvc:QMAKE_CXXFLAGS_RELEASE+=/O2/openmp/arch:AVXelse:QMAKE_CXXFLAGS_RELEASE+=-O3-march=native-fopenmp-D_GLIBCXX_PARALLEL可悲的是,这不起作用。其他方法是更改​​mkspecs并将新的与我的应用程序捆绑在一起,但它不是很便携。谢谢! 最佳答案 Jean,准确

C++:是否需要使用相同版本的 GCC 和 GDB 进行调试

我正在使用minGW在Windows上使用C++进行开发。我目前有调试问题。我必须使用旧版本的GCC(4.4)。所以我只是想知道是否可以使用这个旧的GCC进行编译并使用新的GDB进行调试?这两者之间有什么联系?(任何有关调试器崩溃的指示也将不胜感激!我只知道我需要确保使用调试DLL) 最佳答案 GDB和GCC是独立的程序——独立的源代码库(有一些共享代码,虽然不多),通常是独立的维护者,不同的发布时间表和不同的版本号。他们确实有一些共同的文化,当然也有一些协调。GDB在向后兼容性方面相当不错。它甚至为旧版本的GCC和有时其他编译器发

c++ - gcc used 属性的用例是什么?

#include//xyzwillbeemittedwith-flto(orifitisstatic)evenwhen//thefunctionisunused__attribute__((__used__))voidxyz(){printf("HelloWorld!\n");}intmain(){return0;}我需要这个做什么?除了直接调用函数之外,还有什么方法可以到达xyz吗,比如一些dlsym()之类的魔法? 最佳答案 Attributeused在您想要强制编译器发出符号的情况下很有用,而通常情况下它可能会被省略。作为GC

c++ - 为什么 GCC 拒绝引用 std::optional?

std::optionalxx;只是不针对最新的gcc-7.0.0快照进行编译。C++17标准是否包括std::optional供引用?为什么不呢?(我猜在专用特化中使用指针的实现不会造成任何问题。) 最佳答案 因为optional,如C++17中的标准化,不允许引用类型。这是设计排除的。这有两个原因。首先是,从结构上讲,一个optional相当于T*.它们可能有不同的界面,但它们做的事情是一样的。第二件事是,标准委员会实际上没有就optional究竟如何的问题达成共识。应该行为。考虑以下几点:optionalot=...;Tt=.

c++ - 这个 For 循环中发生了什么 GCC 优化?

使用gcc4.6和-O3,我使用简单的时间命令对以下四个代码进行了计时#includeintmain(intargc,char*argv[]){doubleval=1.0;unsignedintnumIterations=1e7;for(unsignedintii=0;ii案例1在0.09秒内运行#includeintmain(intargc,char*argv[]){doubleval=1.0;unsignedintnumIterations=1e8;for(unsignedintii=0;ii案例2在17.6秒内运行intmain(intargc,char*argv[]){doub

c++ - 如何使用 gcc 工具检查 C++ 头文件是否正确?

如何使用gcc工具检查头文件的语法是否正确? 最佳答案 -fsyntax-only完全按照您的意愿行事:echo'inti;'>good.hppecho'inti'>bad.hppg++-fsyntax-onlygood.hppecho$?#0g++-fsyntax-onlybad.hpp#bad.hpp:1:5:error:expectedinitializeratendofinput#inti#^echo$?#1g++--version|head-n1g++(Ubuntu4.8.1-2ubuntu1~12.04)4.8.1man