草庐IT

c++ - is_lock_free 未在 gcc 4.7.2 的 std::atomic<T> 中定义?

我遇到这个编译器错误functionstd::atomic::is_lock_free()const:error:undefinedreferenceto'__atomic_is_lock_free'whencompilingcodelikebelowusinggcc4.7.2onlinux.structS{inta;intb;};std::atomics;cout 最佳答案 AtomicAPIisn'tcompleteinGCC4.7:Whenlockfreeinstructionsarenotavailable(eitherth

c++ - lambda 表达式的右值和左值引用 - gcc 与 msvc

在C++中,将右值隐式转换为左值引用是非法的。考虑以下代码,其中左值引用绑定(bind)到右值(lambda):intmain(){auto&f=[]()->void{};return0;}gcc(4.8.1)不接受这样的代码(完全有道理)。但是,Microsoft编译器确实接受它,这意味着它要么接受非标准代码,要么C++允许左值引用绑定(bind)到右值lambda表达式的特殊情况。问题:哪个假设是正确的? 最佳答案 您问题的核心是:rvalues可以绑定(bind)到non-constlvalue引用吗?标准说不。rvalues

c++ - GCC --gc-sections 和寻找符号依赖

我正在尝试减小我的elf可执行文件的大小。我正在使用-ffunction-sections-fdata-sections进行编译并使用-gc-sections进行链接,但它出现了一些符号我相信未使用的不会被丢弃。我可以运行GNU工具链中的一些命令来查明正在使用哪些符号以及在何处使用?工具链:GNUarm-none-eabi平台:Cortex-M4语言:C++这是我的典型构建标志:编译:arm-none-eabi-g++.exe-Wall-O3-mthumb-std=c++11-mcpu=cortex-m4-mfpu=fpv4-sp-d16-mfloat-abi=softfp-fsing

c++ - 为什么 gcc 不为我决定内联或不内联这个功能?

从网上的一些话我知道GCC很聪明,可以决定是否内联一个函数。inline关键字只是一个提示:GCC可以内联一个普通函数,而不能内联一个内联函数。但是对于我项目中的这个功能:structvb_pos{union{struct{intoffset;intl;};unsignedlonglongg_offset;};};staticinlinevoidvi_write_vtail_smart(structvi*vi){structvb_pos*vhead,*vtail,*cursor;vhead=&vi->v_head;vtail=&vi->v_tail;cursor=&vi->cursor

c++ - GCC 和预编译 header

看完thisnicearticle(预编译头的护理和供给),我对这些在现实生活中如何实际工作有一些疑问。更具体地说,我如何知道我需要在以下场景中触发预编译头的重建:我决定在我的一个.cpp文件中#define一些东西,它改变了预处理器解释一些已经包含在我的预编译头文件中的头文件的方式我在我的一个.cpp文件中包含另一个header,它#define是一个特定的预处理器指令,它改变了预处理器解释已包含在预编译header中的header的方式更糟糕的是,当某些header#include其他header时,之前的问题可能会递归发生预编译header的使用是否应该强制执行某种限制性编码风格

c++ - clang 中的 constexpr 错误,但 gcc 中没有?

让我们举个简单的例子:#includenamespacefoo{constexprintmain(intargc,char*argv[]){//code}}intmain(intargc,char*argv[]){returnfoo::main(argc,argv);}取决于代码是什么,clang会提示或不提示。如果代码是:coutclang提示:error:constexprfunctionneverproducesaconstantexpression[-Winvalid-constexpr]constexprintmain(intargc,char*argv[]){note:no

c++ - GCC 4.9 的 unordered_set 和 std::move

当在GCC4.9上移出一个unordered_set,然后重新使用移出的对象时,我在添加到它时得到除以零。我的理解(来自http://en.cppreference.com/w/cpp/utility/move)是可以使用移出的对象,前提是不违反其先决条件。在移出的集合上调用clear()很好(这在前提条件的上下文中是有意义的),但我不清楚我添加新元素是否违反了任何前提条件。示例代码:#includeusingnamespacestd;voidfoo(unordered_set&&a){unordered_setcopy=std::move(a);}voidtest(){unorder

c++ - "less than"ifstream 与 GCC 4 与 6 的比较

我偶然发现了这段代码:std::stringexport_str="/path/to/file";std::ofstreamexport(export_str.c_str());if(export这可以在GCC4.9.3上正常编译和运行,但在GCC6.1.1上会出现此错误:error:nomatchfor‘operator}’and‘int’)if(export我尝试使用GCC6:-std=c++98(编译)-std=c++03(编译)-std=c++11(不编译)编辑:但是,在GCC4中,它仍然使用-std=c++11进行编译。.这个具体事实也在下面的答案中解释。:)所以我猜这方面的

c++ - 修复 GCC 中的 "comparison is always false ..."警告

我遇到了一个我确定很容易解决的问题,但我不知所措......我有一个执行以下代码的模板:Tvalue=d;if(std::numeric_limits::is_signed){if(value现在,出于显而易见的原因,当此代码针对无符号类型编译时,GCC会给我一个警告(由于数据类型的范围有限,比较总是错误的)。我完全理解这背后的原因,我进行了numeric_limits检查以查看是否可以让编译器关闭它(它适用于MSVC)。唉,在GCC下,我得到了警告。有什么办法(除了禁用警告,我什至不知道你是否可以使用GCC)来修复这个警告?代码永远不会被调用,我假设优化器也会编译它,但我无法摆脱警告

c++ - 如何有选择地依赖 gcc 的共享对象?

首先,我根本不知道我的问题是否有解决方案。我有以下情况:我开发了一个框架库,它依赖于其他几个库来访问特定的硬件等。到目前为止,这个框架库只是静态链接。对于使用框架库的可执行文件,只需链接可执行文件实际使用的代码的依赖项。(如果我根本不访问特定硬件,我就不必依赖其关联的库。)现在我还需要制作一个框架库的共享对象。此外,依赖项可作为共享库使用,因此不需要任何静态链接。我现在遇到的问题:在构建动态链接到框架库的应用程序时,我必须将所有依赖项动态链接到框架库或应用程序。(否则我会收到来自ld的undefinedreference投诉)我的问题:如果我知道我的应用程序不会使用依赖于此共享对象的框