草庐IT

c++ - 为什么 gcc 不能内联可以确定的函数指针?

以下程序在centos的gcc4.6.2下用-O3编译:#include#include#include#includeusingnamespacestd;templateclassF{public:typedefvoid(T::*Func)();F(Funcf):f_(f){}voidoperator()(T&t){(t.*f_)();}private:Funcf_;};structX{X():x_(0){}voidf(){++x_;}intx_;};intmain(){constintN=100000000;vectorxv(N);autobegin=clock();for_eac

c++ - MacPorts GCC 4.7 OS-X Mavericks 10.9 C11 中的 undefined symbol “toupper”

编辑2:下面是一个程序示例:#include#includeintmain(){inti=0;charstr[]="TestString.\n";charc;while(str[i]){c=str[i];putchar(toupper(c));i++;}return0;}1)clang:clang++-std=c++0x-stdlib=libc++-lc++main.cc-omain编译正常。2)g++-mp-4.8-std=c++11main.cc-omain给出:Undefinedsymbolsforarchitecturex86_64:"toupper(int)",referen

c++ - 推迟 C++ 静态对象构造 - Linux 上的 GCC

假设我有一个名为MyClass的C++类。想象一下,我无法访问MyClass的源代码...它包含在一个库中,我只获得了MyClass的库和头文件>.假设类本身需要环境预配置……例如……在调用类的构造函数之前,我需要做一些设置。该类通常按如下方式使用:voidfunc(){doGlobalSetup();MyClassmyInstance(1,2,3);myInstance.doSomething();...}现在我遇到了需要创建类的全局实例的情况,例如:MyClassmyInstance(1,2,3);intmain(intargc,char*argv[]){doGlobalSetup

c++ - strcpy_s 不适用于 gcc

我有一个C++11项目,我添加了一些strcpy_s方法调用。这适用于Windows,但是在gcc上编译时,会出现错误声明未找到strcpy_s符号。我确实添加了行#define__STDC_WANT_LIB_EXT1__1代码,无济于事。 最佳答案 GCC(或者更确切地说,glibc)不支持strcpy_s()和friend。有关在哪里可以找到支持它们的库的一些想法,请参见此处:Arethereanyfreeimplementationsofstrcpy_sand/orTR24731-1?

c++ - gcc 在 abs 函数上的奇怪行为

我将一些代码从windows(vs2010)移植到gcc它的一部分看起来像:doubler1/*=somevalue*/;doubler2/*=somevalue*/;doublediff=abs(r1-r2);std::cerr它使用-Wall-Wextra在gcc(arm-linux-gnueabihf-g++(Raspbian6.3.0-18+rpi1+deb9u1)6.3.020170516)上编译,没有警告。结果是:0.121,0.0709839,00.015,0.131958,00.015,0.00799561,00.21,0.00799561,00.182,0.20599

c++ - 更新 Apple g++/gcc

Applegcc和GNUgcc有什么区别?Applegcc是标准gcc的超集吗?我的OSX中的g++版本信息显示:$g++--versioni686-apple-darwin11-llvm-g++-4.2(GCC)4.2.1(BasedonAppleInc.build5658)(LLVMbuild2335.15.00)根据this,C++11的一些最新功能在gcc4.3/4.4中.有没有我可以升级到的更新版本的Applegcc。如果是这样,我该怎么做?我有Xcode4.1 最佳答案 嗯,对于第一部分,Apple在这种情况下使用g++

c++ - 使用(自定义)GCC 4.x 或 5.x 时,Boost 构建无法通过 C++11 功能检查

我需要在Fedora24机器上构建Boost1.62和1.63,但使用GCC4.9.3或GCC5.4.0(取决于CUDA版本,这就是我需要旧编译器的原因)。但是如果我按照thisanswer中的描述设置自定义GCC版本并运行/b2--toolset=gcc-5.4.0stage令我懊恼的是,我现在看到了:-32-bit:no-64-bit:yes-arm:no-mips1:no-power:no-sparc:no-x86:yes-symlinkssupported:yes-C++11mutex:no-lockfreeboost::atomic_flag:yes-Boost.Config

c++ - GCC 中的结构对齐(是否应在 typedef 中指定对齐?)

抱歉问了一个愚蠢的问题,但如果我需要确保结构/类/union的对齐,我应该在typedef声明中添加attribute((aligned(align)))吗?classmyAlignedStruct{}__attribute__((aligned(16)));typedefmyAlignedStructmyAlignedStruct2;//WillmyAlignedStruct2bealignedby16bytesornot? 最佳答案 shouldIaddattribute((aligned(align)))totypedefde

c++ - std::stoi 的问题,不适用于 MinGW GCC 4.7.2

#include#includeintmain(){std::stringtest="45";intmyint=stoi(test);std::cout我在运行MinGWGCC4.7.2的计算机上尝试了这段代码。它给了我这个错误:我做错了什么,我是从cppreference得到的.它的代码完全相同。它与描述的错误不同here. 最佳答案 看来您的MinGW需要一个补丁:EnablingstringconversionfunctionsinMinGWThispatchenablesthefollowinglistofC++11func

c++ - GCC - 在特定偏移量中定义成员的结构

在gcc中有没有一种方法,我可以在其中定义一个具有特定偏移量的特定成员的结构?我想按以下方式定义一个结构:struct{.offset(0xDC)//orsomethingequivalentintbar;}foo;然后是下面的语句:inta=foo.bar将与声明相同:inta=*(int*)((char*)&foo+0xDC);*更新*一些背景:我想访问我没有正确定义的导出结构中的成员,它有很多成员——我只关心其中的一小部分,并且它们的偏移量(结构原始定义)在每个目标平台上都有点不同(我需要为几个不同的平台编译我的代码)我已经考虑过这里评论中提到的填充选项,但是每次我想添加一个成员