草庐IT

mb_convert_variables

全部标签

c++ - "could not convert template argument"指针参数错误,即使使用强制转换

假设我有一个声明如下的模板类:templatestructy{int*b;y(){b=x;}}我确实需要模板参数是一个常量内存地址——它是一个嵌入式代码。如果我尝试像这样实例化它:(编译器是带有-std=gnu++11的gcc4.8.1)yc;我会收到错误消息“无法将模板参数‘1’转换为‘int*’”,这没关系,而且符合标准。我明白。我的问题是转换为指针也不起作用:yd;y(1)>e;error:couldnotconverttemplateargument'1u'to'int*'在这两种情况下。这是为什么?模板参数已经转换,不是吗? 最佳答案

c++ - 扭曲的逻辑 : a global variable in one file refers to an extern variable but is also referred by that extern variable

文件A.cpp:#includeexternintiA;externintiB=iA;intmain(){std::cout文件B.cppexternintiB;externintiA=2*iB;编译链接运行,out进来debug和release模式是0,0我的问题是它是如何工作的,为什么在链接阶段没有问题?我正在使用VC++2003。 最佳答案 初始化程序覆盖了extern关键字,因此这没有什么“神奇”:您只是在不同的翻译单元中声明和定义两个完全不相关的变量。来自StandardforProgrammingLanguageC++-

c++ - std::condition_variables 可以用作计数信号量吗?

这是CanC++11condition_variablesbeusedtosynchronizeprocesses?的后续行动.std::condition_variable对象可以用作计数信号量吗?我认为不是因为对象似乎绑定(bind)到std::mutex,这意味着它只能用作二进制信号量。我在网上看过,包括here,here,和here,但找不到将这些对象用作计数信号量的引用或示例。 最佳答案 是的。structcounting_sem{counting_sem(std::ptrdiff_tinit=0):count(init)

c++ - G++ 4.6 -std=gnu++0x : Static Local Variable Constructor Call Timing and Thread Safety

voida(){...}voidb(){...}structX{X(){b();}};voidf(){a();staticXx;...}假设在进入main之后,f被多个线程(可能竞争)多次调用。(当然,唯一对a和b的调用是上面看到的那些)以上代码在-std=gnu++0x模式下用gccg++4.6编译时:Q1。是否保证至少调用一次a()并在调用b()之前返回?也就是说,在第一次调用f()时,x的构造函数是否会同时调用一个自动持续时间局部变量(非静态)(而不是在全局静态初始化时间)?Q2。是否保证b()只会被调用一次?即使两个线程第一次同时在不同的核上执行f?如果是,GCC生成的代码通过

c++ new运算符通过libstdc++占用大量内存(67MB)

我对libstdc++中的new运算符有一些疑问。我用C++编写了一个程序,但在内存管理方面遇到了一些问题。在用gdb调试以确定是什么在消耗我的ram之后,我得到了以下infoprocmappingsMappedaddressspaces:StartAddrEndAddrSizeOffsetobjfile0x4000000x4040000x40000/home/sebastian/Developement/powerserverplus-svn/psp-job-distributor/Release/psp-job-distributor0x6040000x6050000x10000x

c++ - GMock : How to return mock class variable as the return value

我是第一次尝试使用GMock(用于C++的谷歌模拟框架)。我有以下类(class):classLocalCache{public:virtualtime_tGetCurrentTime()=0;virtualintAddEntry(conststd::stringkey,std::string&value);virtualintGetEntry(conststd::stringkey,std::string&value);};GetEntry方法调用GetCurrentTime调用。我想模拟GetCurrentTime方法,以便我可以在测试中提前时钟以测试作为GetEntry调用的一部

c++ - 错误 C2440 : 'initializing' : cannot convert from 'initializer-list'

#includeusingnamespacestd;structTDate{intday,month,year;voidReadfromkb(){cout>day>>month>>year;}voidprint(){cout为什么我收到错误1​​errorC2440:'initializing':cannotconvertfrom'initializer-list'to'TDate'and2IntelliSense:toomanyinitializervalues。当我删除boolvalid和intID时,程序可以运行。为什么会这样? 最佳答案

c++ - LLVM IR : Identifying Variables with Metadata Nodes

目前我正在开发一种工具,该工具可以识别对任意程序的全局变量和字段变量的加载和存储访问。此外,访问的变量应该由它们的源级别名称/标识符来标识。为了完成这个,我将被诊断程序的源代码编译成带有调试信息的LLVMIR。到目前为止一切顺利,生成的元数据节点包含所需的源级别标识符。但是,我无法将某些LLVMIR标识符和元数据中的信息联系起来。例如,考虑一个类的静态成员:classTestClass{public:staticintNumber;};相应的LLVMIR如下所示:@_ZN12TestClass6NumberE=externalglobali32,align4...!15=!DIDeri

c++ - VisualStudio *.obj 文件大小(513Mb objs 和 534Mb lib)

我是一名C++开发人员,使用的是VisualStudio2008。如何减小*.obj文件的大小?我读过whyaremyvisualstudio.objfilesaremassiveinsizecomparedtotheoutput.exe?但没有找到答案。当我将项目构建为静态库时,所有*.obj文件的总大小为513Mb,生成的库为534Mb。每个obj文件为1-13Mb。调试exe文件为11Mb。链接时代码生成(/Gm)已关闭。提前致谢。 最佳答案 由于将大量重复代码和符号放入多个目标文件中,目标文件往往会变大。这通常是由内联函数和

c++ - 与 std::condition_variable 相比,使用 std::atomic 的方法 wrt 在 C++ 中暂停和恢复 std::thread

这是一个单独的问题,但与我之前提出的问题有关here我正在使用std::thread在我的C++不断轮询某些数据并将其添加到缓冲区的代码。我用C++lambda像这样启动线程:StartMyThread(){thread_running=true;the_thread=std::thread{[this]{while(thread_running){GetData();}}};}thread_running是一个atomic在类头中声明。这是我的GetData功能:GetData(){//Someheavylogic}接下来我还有一个StopMyThread我设置的功能thread_r