草庐IT

c++ - GCC对纯函数的优化

我对GCC关于优化pure函数的保证感到困惑(来自onlinedocs):pureManyfunctionshavenoeffectsexceptthereturnvalueandtheirreturnvaluedependsonlyontheparametersand/orglobalvariables.(...)Interestingnon-purefunctionsarefunctionswithinfiniteloopsorthosedependingonvolatilememoryorothersystemresources,thatmaychangebetweentwoco

c++ - gcc -fPIC 与 -shared

在使用gcc/g++编译共享库时,为什么-shared选项没有隐含-fPIC?或者,换句话说,链接时是否需要选项-fPIC?简而言之,我应该写:gcc -c -fPIC foo.c -o foo.ogcc -shared -fPIC foo.o -o libfoo.so//with-fPIC或者以下是否足够:gcc -c -fPIC foo.c -o foo.ogcc -shared foo.o -o libfoo.so//without-fPIC 最佳答案 内置到共享库中的代码通常(但不是必须)是与位置无关的代码,以便共享库可以很

c++ - 当 static_cast'ing 为仅移动类型时,Clang 与 GCC

考虑以下简单的仅移动类:structbar{constexprbar()=default;bar(barconst&)=delete;bar(bar&&)=default;bar&operator=(barconst&)=delete;bar&operator=(bar&&)=default;};现在,让我们创建一个包装器:templatestructbox{constexprbox(T&&x):_payload{std::move(x)}{}constexprexplicitoperatorT()&&{returnstd::move(_payload);}private:T_payl

c++ - 用于 gcc-arm 工具链的 Boost C++ 库

我在timesysarm-gcc工具链上构建1.35.0和1.36.0都没有问题,包括静态(静态链接)和动态(.so,默认选项)。但是,当我尝试链接一个简单的示例文件系统应用程序时:#include#includenamespacefs=boost::filesystem;intmain(intargc,char*argv[]){constchar*fileName=argv[1];std::cout"我收到以下链接器错误:developer@eldp01:~/boost/test$/opt/timesys/at91sam9263_ek/toolchain/bin/armv5l-tim

c++ - Eclipse CDT 与 Cygwin GCC : automatic discovery of symbols and paths

我使用EclipseCDT和CygwinGCC3作为编译器。我的项目正在使用自定义Makefile。问题是在调试代码时,它找不到源文件,即使我添加了自定义路径映射:/cygdrive/cc:\除了我得到所有标准头文件的“Unresolvedinclusion”这一事实之外,即使程序编译并运行良好也是如此。我将问题追溯到“自动发现”选项,该选项显示以下错误:请注意,我确保工作区目录位于没有任何空格的路径上。奇怪的是,当我在shell中运行那个有问题的命令时,它运行得很好,输出如下:$gcc-E-P-v-dDC:/Users/Amro/workspace/.metadata/.plugin

c++ - 静态表生成适用于 GCC 但不适用于 clang; clang 有问题吗?

我曾经写过一些代码,在编译时为一些模板元编程生成一个静态表/数组(这个想法是C风格的字符串可以在编译时构建(它们只是char数组))。这个想法和代码基于DavidLin的answer:#includeconstintARRAY_SIZE=5;templateclassTable:publicTable{public:staticconstintdummy;};templateclassTable{public:staticconstintdummy;staticintarray[N];};templateconstintTable::dummy=Table::array[I]=I*I+

c++ - 禁用不兼容选项的 gcc 警告

我很好奇是否有一个选项可以禁用关于参数对正在编译的语言无效的gcc警告。例如:cc1:warning:commandlineoption"-Wno-deprecated"isvalidforC++/Java/ObjC++butnotforC我们的构建系统会在整个构建过程中传递我们在全局范围内决定的警告。我们同时拥有C/C++代码,并且在尝试查找实际警告时警告会变得非常烦人。有什么建议吗? 最佳答案 在gcc-Wxxxx中启用特定警告并使用-Wno-xxxx禁用它们。来自GCCWarningOptions:Youcanrequestm

c++ - GCC STL 是线程安全的吗?

我在网上发现了相互矛盾的信息:http://www.sgi.com/tech/stl/thread_safety.htmlTheSGIimplementationofSTListhread-safeonlyinthesensethatsimultaneousaccessestodistinctcontainersaresafe,andsimultaneousreadaccessestotosharedcontainersaresafe.Ifmultiplethreadsaccessasinglecontainer,andatleastonethreadmaypotentiallywri

c++ - std::back_inserter 在旧的 GCC 上需要 const_reference。为什么?

我目前正在查看一些可以在较新版本的GCC上编译但不能在旧版本上编译的代码。在我的例子中,我使用std::back_inserter将一些数据从一个数据结构std::copy到自定义数据结构。但是,如果我忘记了此自定义数据结构中的typedefvalue_type&const_referencetypedef,它将无法在GCC4.4上编译。相同的代码在GCC4.5上编译和运行得很好。这两个编译器版本之间有什么区别,这使得代码可以在一个版本上编译但不能在另一个版本上编译。我猜想这与C++11的实现有关,后者在GCC4.4中不太完整。我猜可能是decltype或另一个新的C++11关键字。此

c++ - 将 16 字节 CAS 与 GCC 结合使用时出现未定义的引用链接器错误

我在Debian上使用GCC4.7.2,每当我尝试使用时都会遇到链接器错误具有16字节值的设施。我正在运行可以支持CMPXCHG16B的x86_64VM指令-但即使我没有必要的硬件,我也不明白为什么这里会产生链接器错误。据我所知,如果硬件不支持必要的CAS操作,库应该回退到使用常规锁。无论如何,这里有一个非常简单的测试用例来重现这个问题:#include#includestructfoo{std::uint64_tx;std::uint64_ty;};intmain(){std::atomicf1({0,0});foof2={0,0};foof3={1,1};f1.compare_ex