草庐IT

static_allocator

全部标签

c++ - std::allocator 构造/销毁与放置 new/p->~T()

对于我的一个项目,我正在从头开始编写一些STL容器(我有我的理由)。由于我非常接近地模仿STL的功能和接口(interface),所以我会尽最大努力遵守“如果它与标准结构同名,它将尽可能符合标准”的政策。所以,当然我的容器将分配器作为模板参数,这非常好,因为它允许一些自定义分配方案。关于我的问题。std::allocator接口(interface)将内存分配与对象构造分开。同样,它将释放与销毁分开。这是有道理的,因为从哪里获取内存与在C++中正确构造对象或多或少无关。所以有两个构造/释放函数,默认实现如下所示(直接从书中摘录):voidconstruct(pointerp,const

c++ - 头文件中的 `static` , `extern` , `const`

//a.hexternintx1;staticintx2;intx3;staticconstintx4;classA{public:staticconstintx5=10;};a.h会被多个.cpp文件包含,我的问题是:1.x1只是一个声明,不是吗?所以它的定义应该在那些.cpp文件之一中完成,对吧?2.x2是一个定义,对吧?我曾经认为staticint和externint一样也是一个声明,但我错了。x2将仅在a.h中可见?3.如果a.h包含在多个.cpp文件中,x3会被定义多次,所以x3会导致编译错误,对吧?4.x4是一个定义,对吧?5.这里在A类中,x5是一个声明,是的。但是x4呢

c++ - 为什么我们使用 static_cast 为 NULL

当我尝试研究QP/CPP代码时,我遇到了以下行。QTimeEvt*t;//...if(t==static_cast(0)){为什么他们要做0的static_cast?如果他们想检查NULL,我们可以直接这样做吗?这个源代码你可以在中找到http://www.state-machine.com/qpcpp/qf__time_8cpp_source.html 最佳答案 是的,这是不必要的,尽管它可能是某些风格指南为了“清晰”而强制要求的,或者它可能是为了让过度热心的静态分析工具沉默。当然,如今,我们只需编写nullptr就可以了。

c++ - 为什么 std::allocator::construct 和 std::allocator::destroy 在元素类型上模板化?

std::allocator的construct和destroy成员函数根据要构造的元素的类型进行参数化:templateclassallocator{public:typedefTvalue_type;typedefT*pointer;templatevoidconstruct(U*p,Args&&...args);templatevoiddestroy(U*p);...};这样做的理由是什么?他们为什么不选择value_type*或pointer?好像allocator应该只知道如何构造或销毁T类型的对象. 最佳答案 这与all

C++ : initialize static member large array

为了在C++中使用静态数据成员,我目前有类似的东西://HEADERFILE.hclassMyClass{private:staticdoublemyvariable;};//CPPFILE.cppdoubleMyClass::myvariable=0;但如果现在我有://HEADERFILE.hclassMyClass{private:staticdoublemyarray[1000];};如何初始化它?谢谢 最佳答案 和初始化普通数组一样:doubleMyClass::myarray[1000]={1.1,2.2,3.3};缺少

c++ - "static"在 C 和 C++ 中表示没有外部链接的函数/变量是怎么发生的?

在C中,static可以表示局部变量或没有外部链接的全局函数/变量。在C++中,它也可以表示每个类的成员变量或成员函数。有没有提到如何使用看起来与缺少外部链接完全无关的static关键字来表示缺少外部链接? 最佳答案 使用已经存在的关键字的优点是不会向语言添加新的关键字,这可能会破坏现有的程序。它可能令人困惑,但它被认为是一种“较小的邪恶”。 关于c++-"static"在C和C++中表示没有外部链接的函数/变量是怎么发生的?,我们在StackOverflow上找到一个类似的问题:

c++ - C/C++ : What is the difference between a statically-linked library and an object file?

我知道编译时包含在可执行文件中的代码可能来自目标文件(.o文件)和静态链接库(.lib/.a文件)。这两者在根本上和概念上有什么区别?为什么“目标代码”和“静态链接库”之间有不同的概念?各自的优点和缺点是什么,为什么要使用一个而不是另一个?静态链接库是否可以从目标文件生成,反之亦然,目标文件是否可以从静态链接库生成? 最佳答案 目标文件是已编译但未链接的代码。库包含目标文件。因此你的问题变成了,“如果我只能使用目标文件,为什么要使用静态链接库?”原因如下。与对象集合不同,每个对象都有自己的符号表,库有一个单一的、统一的符号表,在库调

C++我们什么时候应该更喜欢使用两个链接的static_cast而不是reinterpret_cast

首先,这不是Whydowehavereinterpret_castinC++whentwochainedstatic_castcandoit'sjob?的拷贝.我知道我们甚至不能使用两个链式static_cast来实现的情况,reinterpret_cast所做的。但是在任何情况下我应该更喜欢两个链接的static_cast而不是简单且更具可读性的reinterpret_cast? 最佳答案 reinterpret_cast应该是一个巨大的闪烁符号,表示这看起来很疯狂,但我知道我在做什么。不要因为懒惰而使用它。reinterpret

C++ : Why cant static functions be declared as const or volatile or const volatile

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++-Whystaticmemberfunctioncan’tbecreatedwith‘const’qualifier想知道为什么静态成员函数不能声明为const或volatile或constvolatile的原因?#includeclassTest{staticvoidfun()const{//compilererrorreturn;}};

c++ - C++ 中的 static const 与 #define - 可执行文件大小的差异

我的基本情况:我有一个包含类似#definefoo(Flag1|Flags2|Flag3)的包含文件,因此它是位标志的预定义组合。为了类型安全,我想用静态常量替换这些#defines,即staticconstintfoo=(Flag1|Flag2|Flag3)(或类似的)。这个包含文件包含在程序的几十个地方。现在,当我在启用所有相关优化选项(使用VS2010的C++编译器)的情况下进行发布构建时,替换#defines似乎会使可执行文件增加几个KiB,具体取决于我替换了多少常量。为什么会这样?据我所知,如果可能的话,整数常量应该“内联”到生成的ASM代码中,我看不出如何使用staticc