草庐IT

local-types

全部标签

c++ - 可以使用 thread_local 在 dll 中为每个线程提供一个静态全局变量吗?

我想使用C++11关键字thread_local在我们的开源库中,它可以在静态变量的上下文中动态或静态地链接到许多平台(Windows、Linux、MacOS等)上。这个变量是一个类类型,基本上只是封装一个std::stringstream变量并初始化它以满足我们的stringstream格式要求。出于性能原因,我们希望它静态可用(有关更多详细信息,请参阅我之前的question),如果这是每个线程完成的也可以。全局变量应该在静态模板类方法中使用,这些方法必须在头文件中实现。但这意味着,如果我理解正确的话,库的用户可能会在他们的可执行文件代码中包含此header,这会将模板化方法编译到

c++ - C++ 程序末尾的 thread_local vector 段错误

我正在尝试制作一个多线程程序,但在线程局部vector方面遇到了一个奇怪的问题。这是(精简到只有错误)代码:#include#includethread_localstd::vectorvec;intmain(){vec.push_back(3);std::cout程序编译正常,运行基本正常,但在我按回车键后,我收到“程序已停止工作”消息。我在gdb中运行它并得到了这个错误:ProgramreceivedsignalSIGSEGV,Segmentationfault.0x004030b0instd::vector>::~vector()()不知何故,vector的析构函数中存在错误。使

c++ - 这是 "new auto(enum_type)"的 Microsoft VC++ 2010 编译器错误吗

环境:MicrosoftVisualStudio2010withSP1Preminum(10.0.40219.1SP1Rel),WindowsXPSP3VC10编译器支持auto关键字,但推导的类型相关信息对于枚举似乎并不总是正确的。例子:#includeenumfruit_t{apple=100,banana=200,};intmain(){constautopa=newauto(banana);constautopb=newfruit_t(banana);static_assert(std::is_same::value,"notsame!");deletepb;deletepa;

c++ - 使用 boost::locale/ICU 边界分析与中文

使用theboost::localedocumentation中的示例代码,我无法获得以下内容以正确标记中文文本:usingnamespaceboost::locale::boundary;boost::locale::generatorgen;std::stringtext="中華人民共和國";ssegment_indexmap(word,text.begin(),text.end(),gen("zh_CN.UTF-8"));for(ssegment_index::iteratorit=map.begin(),e=map.end();it!=e;++it)std::cout这拆分了中

c++ - 无法编译项目 : error in locale. h 文件

我正在尝试编译一个具有以下header的项目:locale.h;语言环境.h:classLOG4CXX_EXPORTLocale{public:...protected:Locale(constLocale&);Locale&operator=(constLocale&);constLogStringlanguage;谁能给我一些建议?我遇到了这个错误。我不知道有什么问题。/LOGGER/include/log4cxx/helpers/locale.h:42:41:error:field‘language’hasincompletetypeconstLogStringlanguage;

Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)

Error:CannotinstallinHomebrewonARMprocessorinInteldefaultprefix(/usr/local)错误原因分析解决方案错误原因分析在使用brewinstall命令安装软件包时,出现如上错误。这个错误信息通常出现在使用M1/M2芯片(ARM架构)的Mac上,是因为尝试在Intel架构的默认前缀/usr/local上安装Homebrew时。Homebrew建议在M1/M2芯片上使用不同的前缀目录/opt/homebrew来安装,以确保与M1/M2芯片兼容的二进制文件被正确安装。这是为了避免架构不匹配的问题。解决方案为了解决这个问题,需要重新在/o

C++ 模板 "class type"错误

我一直在研究一个链表模板类来对各种变量做同样的事情,并设法解决了大部分问题。除了编译时,我得到这些:g++-Wall-otemplate_testtemplate_test.cppInfileincludedfromtemplate_test.cpp:1:0:LinkedList.h:50:11:error:declarationof‘classType’LinkedList.h:7:11:error:shadowstemplateparm‘classType’LinkedList.h:51:30:error:invaliduseofincompletetype‘classLinked

c++ - 为什么 boost::call_traits<double>::param_type 是 "const double&"而不是 "double"

我在win32program@windows7机器上使用代码“boost::call_traits::param_type”。令我惊讶的是,它不是“double”而是“constdouble&”。我认为所有原始类型都适合对函数参数使用“按值传递”,这不是常识吗?因为很多人会使用is_pod来判断是否使用引用,不是吗? 最佳答案 根据doc,该优化显然只适用于“小型”内置类型。.快速浏览source,看起来“小”类型被认为是满足sizeof(T)的类型.在32位机器上,这显然不包括double.在某些情况下,将参数传递为double可

python - 关于boost-python : dyld: Symbol not found: _PyBaseObject_Type

当我运行我的代码时,我遇到了一个关于boost-python的问题。就像这样:dyld:Symbolnotfound:_PyBaseObject_TypeReferencedfrom:/opt/local/lib/libboost_python-mt.dylibExpectedin:flatnamespace我的项目几个月前就可以正常运行了。但是现在,当我重新配置环境时,它无法运行。-几个月前,我用homebrew配置环境,就像这样:brewinstallboostbrewinstallpythonbrewinstallboost-pythonbrewinstallopencv(Myp

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生成的代码通过