草庐IT

static_allocator

全部标签

c++ - 在 Windows 上将 Boost 库与 Boost_USE_STATIC_LIB OFF 链接

我的CMakeFiles.txt看起来像这样:cmake_minimum_required(VERSION2.6)#SetwarningsonandenabledebuggingSET(CMAKE_C_FLAGS"-Wall-q")include(FindBoost)set(Boost_USE_STATIC_LIBSON)set(Boost_USE_MULTITHREADEDON)set(Boost_USE_STATIC_RUNTIMEOFF)find_package(Boost1.57.0COMPONENTSsystemfilesystemREQUIRED)if(Boost_FOUN

c++ - 奇怪的 static_cast 把戏?

在仔细阅读Qt源代码时,我遇到了这个gem:templateinlineTqgraphicsitem_cast(constQGraphicsItem*item){returnint(static_cast(0)->Type)==int(QGraphicsItem::Type)||(item&&int(static_cast(0)->Type)==item->type())?static_cast(item):0;}注意static_cast(0)->Type?我已经使用C++很多年了,但以前从未见过0在static_cast中使用过。这段代码在做什么,它安全吗?背景:如果您从QGrap

c++ - 私有(private)成员 : Static const vs. 只是 const

当一个对象具有一些不会改变并且在其整个功能中都需要的特征时,我正在尝试确定最佳选择。静态常量成员Const成员在我看来,静态成员的真正原因是拥有一个可以更改的变量,从而影响同一类的所有其他对象。但是,有人建议将类“不变量”作为静态常量成员。我正在寻找有关建立类常量的推荐方法及其原因的一些见解。 最佳答案 “不会改变”不够准确。这里的主要问题是类的不同对象是否需要具有这些const成员的不同值(即使它们在对象的生命周期内没有改变)或者所有对象都应该使用(共享)相同的值。如果类的所有对象的值都相同,那么当然应该是类的staticcons

c++ - 使用 Howard Hinnant 的 short_alloc 进行快速 move 分配

我正在使用HowardHinnant的漂亮的基于竞技场的小分配器,short_alloc.令我震惊的是,从vector进行的move分配可以使用通常的快速move分配(即获取目标的资源)来完成,该vector已经超出其arena,因此分配在堆上。然而,事实并非如此:typedefarenaarena_type;typedefshort_allocalloc_type;typedefstd::vectorvec_type;arena_typearena1,arena2;vec_typevec1(alloc_type(arena1)),vec2(alloc_type(arena2));ve

c++ - g++ 上 constexpr 上下文中成员指针的 static_cast

我在使用static_cast在constexpr上下文中向上转换成员指针时遇到了g++问题。请参见代码示例。在使用g++6.3和7.0版进行编译时,会出现编译错误,指出reinterpret_cast不是常量表达式。虽然clang4.0版没有给出错误,但我认为这是正确的,因为这里没有reinterpret_cast。这是g++或clang中的错误吗?什么是正确的行为?structBase{};structDerived:Base{inti;};structPtr{constexprPtr(intDerived::*p):p(static_cast(p)){}intBase::*p;}

c++ - 多继承类自定义内存alloc和dealloc

我想在我的项目中进行内存管理。我不想要operatorglobalnew/delete所以我实现了一个简单的内存分配器。这是我的代码:classIAllocator{public:void*Alloc(unsignedintsize){1.allocmemory.2.tracealloc.}voidDealloc(void*ptr){1.freememory.2.erasetraceinfo.}templatevoidDestructor(T*ptr){if(ptr)ptr->~T();}};//macroforuseeasy.#defineMYNEW(T)new(g_Allocato

c++ - 容器优化:为什么 STL 容器方法参数不再使用 allocator::const_reference typedef?

阅读之前:const_reference是typedef,不需要是constT&正如您在std::vector::const_reference=bool中看到的那样.请在阅读其余部分时牢记这一点以正确理解它(正如评论中所建议的那样,这对很多人来说很难)。我想为简单类型(例如int)使用STL容器,但发现它们使用了次优的constT&“反模式”-它适用于大类,但在未内联时对于简单/基本类型不是最优的-考虑嵌入式系统,例如在ARM/ATSAM4L上,带有实例化。问题是:为什么例如vector::push_back使用(constvalue_type&)的参数重新设计而不是自C++11以来

c++ - 堆栈溢出 : Duplicate temporary allocation in stack space?

structMemBlock{charmem[1024];MemBlockoperator*(constMemBlock&b)const{returnMemBlock();}}global;voidfoo(intstep=0){if(step==10000){global=global*MemBlock();}elsefoo(step+1);}intmain(){foo();return0;}ProgramreceivedsignalSIGSEGV,Segmentationfault.0x08048510infoo(step=4000)att.cpp:1212voidfoo(intst

C++ static_cast 和引用

structA{};structB:A{};intmain(){Aa;A&a_ref=a;static_cast(a);//*1static_cast(a_ref);//*2return0;}(*1)产生错误,我明白为什么。(*2)编译正常,但为什么呢?而且,只要它编译并假设B包含一些属性,如果我将a_ref转换为B&然后尝试访问属性会怎样?我想我会遇到运行时错误或其他问题。所以,正如我所看到的,有一种情况会导致崩溃,并且没有办法避免它,这与dynamic_cast不同,后者可以检查转换结果是否为null或输入代码在try-catch区域。我如何处理这种情况,我需要转换引用并确保我真的

c++ - 如何在 C++ 中将 static_assert 用于 constexpr 函数参数?

我的库中有几个简短的constexpr函数可以执行一些简单的计算。我在运行时和编译时上下文中都使用它们。我想在这些函数的主体中执行一些断言,但是assert(...)在constexpr函数和static_assert中无效(...)不能用于检查函数参数。例子:constexprintgetClamped(intmValue,intmMin,intmMax)noexcept{assert(mMinmMax?mMax:mValue);}有没有办法检查函数是否在运行时或编译时常量中执行,并且仅当它在运行时执行时才执行断言-时间?constexprintgetClamped(intmValu