草庐IT

static成员

全部标签

c++ - 结构和位域成员排序

这个问题在这里已经有了答案:Doclass/structmembersalwaysgetcreatedinmemoryintheordertheyweredeclared?(6个答案)关闭6年前。a)结构b)位域中成员的顺序是否有保证?换句话说,给定一个结构或位域的某个成员,我是否保证它从结构/位域开始的偏移量不小于它前面的成员的大小之和?举个例子:structS{chara[N];unsignedb:M;charc:O;};c的偏移量是否至少为sizeof(a)+sizeof(b)?

c++ - 成员函数作为函数模板的参数

我想注册回调函数,并将它们存储在一个vector中以供调用。还应该允许使用成员函数作为回调函数。我最初的方法是使用通过以下方式:#include#include#includestd::vector>functions;structFoo{voidBar(){std::coutvoidRegister(T*obj,std::functionfunction){functions.push_back(std::bind(function,obj));}voidmain(){Foofoo;Register(&foo,&Foo::Bar);}这不起作用,因为编译器无法推断参数类型。只有当我明

具有类成员的 C++ 模板类

我在模板方面没有太多经验,但我正在努力学习,所以有人可以告诉我我该怎么做才能完成这项工作,因为我已经看到了很多使用类型名的例子和显式实例化和显式特化,但它们只包括基本类型,如int、char、...所以请帮忙,因为我不知道该怎么做。容器.h#ifndefCONTAINER_H#defineCONTAINER_HtemplateclassContainer{private:Eelement;public:Container(EpElement);virtual~Container();};#endif//CONTAINER_H容器.cpp#include"Container.h"#inc

C++ 对类数据成员的引用

这个问题在这里已经有了答案:Whydoesn'treference-to-memberexistinC++?(1个回答)关闭6年前。我最近才发现类数据成员指针的存在,例如:classCar{public:intspeed;};intmain(){intCar::*pSpeed=&Car::speed;return0;}对类数据成员的引用是否也存在?如果是这样,声明它们的语法是什么?

c++ - protected 成员变量的错误共享?

考虑:classVector{doublex,y,z;//…};classObject{VectorVec1,Vec2;std::mutexMtx1,Mtx2;voidModifyVec1(){std::lock_guardLock(Mtx1);/*…*/}voidModifyVec2(){std::lock_guardLock(Mtx2);/*…*/}};如果互斥量或protected变量连续存储,并且在缓存时共享缓存行,这会导致某种“交叉锁定”吗?如果是这样,在互斥锁保护的变量之后(或之前)声明互斥锁是一个好习惯吗?将类与std::hardware_destructive_inte

c++ - 在 C++ 中,静态对象可以比其静态成员变量长寿吗?

关于C++中静态变量的销毁顺序,静态对象的静态成员变量的生命周期是否有任何保证?例如,如果我有这样的东西(仅用于演示目的的疯狂简化示例):classObject{staticstd::vectorall_objects;publicObject(){all_objects.push_back(this);}~Object(){all_objects.erase(std::remove(all_objects.begin(),all_objects.end(),this),all_objects.end());}};对于不同编译单元中的静态对象,这是否“安全”?也就是说,是否可以保证al

c++ - 类型组的模板类的成员特化?

我有一个矩阵类,我想针对不同的矩阵类型(int、float、double)以不同的方式将矩阵打印到终端。我想实现这个:如果矩阵类型ifint,使用printf("%d",matrix[i][j])打印矩阵如果矩阵类型iffloat或double,使用printf("%.3f",matrix[i][j])打印矩阵否则,抛出错误以下是我所拥有的相关部分:...templateclassMatrix2D{private:std::vector>matrix;public:...voidprint()const;//printthewholematrix}...templatevoidMatr

C++ 嵌套模板 : inaccessible static method

我在以下代码中遇到了一个奇怪的(或者可能不是)错误:templateclassRegistrer{public:Registrer(){Registry::register(T::instance);}};templateclassRegisteringClass{private:staticconstRegistrerREGISTRER;public:RegisteringClass(){Q_UNUSED(REGISTRER);/*forcestaticinstantiation*/}staticconstWhatEver*instance(){staticTINSTANCE;ret

c++ - 非静态数据成员和一个定义规则

前提根据一个定义规则,如C++14Standard中所述,我只要遵循3.2.6中的规则,就可以在每个翻译单元中定义同一个类。这意味着允许以下程序是合法的://a_1.cppclassA{//definitionofAinta;//definitionofA::astaticintb;//declarationofA::bintfoo();//declarationofA::foo();intboo(){return42;};//definitionofA::boo()implicityinlined};//a_2.cppclassA{//definitionofAinta;//defi

c++ - 直接使用初始化列表初始化只有一个数组作为成员的结构是否合法?

#includeclassvec{public:intarr[2];};intmain(){veca={{1,2}};//worksvecb={1,2};//workstoo,butwhy?std::cin.get();}vec除了默认构造函数外没有其他构造函数。但是这段代码编译通过了,我想知道为什么。http://ideone.com/uyx98o 最佳答案 Aggregateinitialization太棒了,你甚至不需要获得正确的嵌套就可以让它工作,而且你还可以提供比成员更少的值:#include#includestructA