草庐IT

c++ - 按引用和按值传递时的 gcc 程序集

我有一个简单的函数来计算两个双数组:#include#includestructS{double*x;double*y;double*z;};voidf(S&s,size_tn){for(inti=0;i请注意,函数f的第一个参数是通过引用传入的。让我们看看f()的结果汇编(我删除了一些不相关的件,插入评论并放置一些标签):$g++-O3-Sasmtest.cpp.globl_Z1fR1Sm_Z1fR1Sm:xorl%eax,%eaxtestq%rsi,%rsije.L1.L5:movq(%rdi),%r8#arrayx(1)movq8(%rdi),%rcx#arrayy(2)movq

c++ - __attribute__ ((weak)) 的处理在 clang 和 gcc 中是不同的

我有一个应用程序(app)和一个动态库/共享对象(dlib),它们都链接到一个静态库,该静态库使用__declspec(selectany)在头文件中声明了一个全局变量(gvar)|/__attribute__((weak)).通过设计,app和dlib都应该有自己的gvar拷贝(在MSVC和GCC上我完全明白这一点)。移植到MacOSX并用clang编译后,我看到dlib中的gvar链接到应用程序中的gvar。不确定这是一个clang错误还是设计使然;如果是设计使然,是否有任何方法可以避免它并获得与GCC/MSVC中相同的行为?clang版本:bash-3.2$c++--versio

c++ - “stoi”未在此范围内声明

这个问题在这里已经有了答案:cygwing++std::stoi"error:‘stoi’isnotamemberof‘std(4个答案)关闭6年前。所以这个错误已经被解决了好几次,但没有答案对我有帮助。我在Windows10上使用Notepad++和Cygwin。我的代码如下,来自DerekBanas's1hourC++tutorial:#include#include#include#include#include#include//#includeusingnamespacestd;intmain(){stringnumberGuessed;intintNumberGuessed

c++ - GCC 与 VS2013 中 std::setprecision(0) 的正确行为

根据我使用的编译器,我在n=0时得到这个函数的不同输出。std::stringToStrWPrec(doublea_value,constintn){std::ostringstreamout;out(GCC)4.8.320140911(RedHat4.8.3-9)为ToStrWPrec(1.2345678,0)返回1。对于相同的代码,VS2013返回1.2346。我的问题是:setprecision的正确/标准行为是什么?什么是使用setprecision的好替代方法?这是根据下面的评论更新的代码std::stringToStrWPrec(doublea_value,constint

c++ - std::string & 作为 gcc 5 中的模板参数和 abi_tag

考虑以下代码(test1.cpp):#includeexternstd::stringtest_string;templateclasstest{public:staticvoidbar(){}};std::stringtest_string("teststring");voidfoo(){test::bar();}现在让我们交换最后两行代码(test2.cpp)的顺序:#includeexternstd::stringtest_string;templateclasstest{public:staticvoidbar(){}};voidfoo(){test::bar();}std::

c++ - 初始化列表中元素的评估顺序

为什么函数g()先被调用?我将g()定义为初始化列表中的第二个元素。标准中与初始值设定项列表相关的以下引述是否相关?§8.5.4.4:Withintheinitializer-listofabraced-init-list,theinitializer-clauses,includinganythatresultfrompackexpansions(§14.5.3),areevaluatedintheorderinwhichtheyappear.#include#includeintf(){std::coutv){}intmain(){h({f(),g()});}输出:gf

c++ - 生成由单独的测试类调用的 C++ 静态库的测试覆盖率

我正在使用QTCreator在C++中处理一个中型项目。项目结构基本上是这样的项目A组图书馆A1B组图书馆B1图书馆B2...等等测试LibA1_TestLibB1_TestLibB2_Test...等等库由测试项目中的可执行文件测试。我已经设法在启用gcov的情况下自行编译测试,并使用lcov生成代码覆盖率报告,但它们显示的覆盖率只是测试用例,而不是我正在测试的实际代码。我也尝试过使用gcov编译静态库,但是当我针对这些库运行测试时,它不会生成任何gcov输出文件。如何通过将我的项目库与测试链接起来来生成gcov输出文件?我想看看我的单元测试是否有任何漏洞。

C++符号分析: how to determine which static initialization is performed?

我想分析是什么原因导致我在Linux上由GCC(v.6.1.1)编译的共享C++库的大小。readelf-sWlibfoo.so告诉我特别大的函数叫做__static_initialization_and_destruction_0,例如:000000000026c42010272FUNCLOCALDEFAULT12__static_initialization_and_destruction_0(int,int)[clone.constprop.1774]我将-Wl,-Map,foo.map添加到CXX标志以生成链接器映射文件。在该映射文件中查找0x000000000026c420会

c++ - noexcept(false) 析构函数覆盖所有特殊成员函数的异常规范?

考虑这个类TstructT{T()noexcept(true){}T(T&&)noexcept(true){}T(constT&)noexcept(true){}T&operator=(T&&)noexcept(true){return*this;}T&operator=(constT&)noexcept(true){return*this;}~T()noexcept(false){}};考虑这个简单的测试程序:intmain(){constexprbooldefault_ctor=noexcept(T());static_assert(default_ctor==true,"Defa

c++ - gcc 和 g++ 错误 : error trying to exec 'cc1plus' : execvp: No such file or directory

我在编译时遇到问题.c和.cpp使用gcc的文件和g++,对于这两种情况,我都收到了消息:g++(orgcc):errortryingtoexec'cc1plus':execvp:Nosuchfileordirectory`我已经尝试重新安装gcc和g++并确保它们的版本相同。编辑:我使用的是ubuntu16.04.1LTS,g++和gcc的版本都是5.4.020160609。以下是echo|g++-v-xc++-fsyntax-only-的输出:Usingbuilt-inspecs.COLLECT_GCC=g++Target:x86_64-linux-gnuConfiguredwit