草庐IT

static-members

全部标签

c++ - 静态库的静态成员

我有静态库和静态成员。该库静态链接到主应用程序及其插件之一。看起来像是在main(应用程序)和dll(插件)中初始化的静态变量。问题:动态库加载时如何避免静态变量重新初始化。或者我可能错过了一些简单的东西?更多信息:这是一个简单的静态库,包含静态成员及其getter和setter:orbhelper.hclassORBHelper{staticstd::stringsss_;public:staticstd::stringgetStr();staticvoidsetSTR(std::stringstr);};orbhelper.cppstd::stringORBHelper::sss_

c++ - 引用类型静态数据成员的问题,可能是编译器错误

我想一个类的静态数据成员可以是一个初始化为全局变量的引用类型,如下所示:#include#includeconstunsignedintglobal=0x1fee;structK{inta;staticconstint&iref;};constint&K::iref=global;intmain(){printf("%d\n",K::iref);return0;}但在我的VC++中test,它可以编译但在执行时会产生异常。这只是VC++的一个错误吗?我做错了什么吗? 最佳答案 你只需要机会constint&k::iref到k::ir

c++ - 是否存在 static_warning?

我知道thisquestion其中提到了Boost的“STATICWARNING”,但我想再问一次,具体来说,我如何实现一个static_warning,它的操作类似于static_assert但只发出一个在编译时发出警告,而不是中止编译错误。我想要类似于Alexandrescu在C++11之前提出的静态断言提案,它以某种方式设法打印一些有用的上下文信息作为错误的一部分。要求用户启用某些标准编译器警告以使此构造工作(可能是“无效指针转换”或“违反严格的别名规则”)是可以接受的——任何应该属于正常编译器的警告编译反正可以用。简而言之,我希望static_warning(false,"He

c++ - constexpr if 和 static_assert

P0292R1constexprif一直included,在C++17的轨道上。它似乎很有用(并且可以替代SFINAE的使用),但是关于static_assert的评论是错误的,不需要诊断在false分支中吓到我了:Disarmingstatic_assertdeclarationsinthenon-takenbranchofaconstexprifisnotproposed.voidf(){ifconstexpr(false)static_assert(false);//ill-formed}templatevoidg(){ifconstexpr(false)static_asser

c++ - vector动态内存分配之private member vector

我是C++新手(我学过Fortran编程),我想为多维表动态分配内存。该表是私有(private)成员变量:classtheclass{public:voidsetdim(void);private:std::vector>thetable;}我想用函数setdim()设置表格的尺寸。voidtheclass::setdim(void){this->thetable.assign(1000,std::vector(2000));}我编译这个程序没有问题,但是当我执行它时,我遇到了一个段错误。对我来说奇怪的是,这段代码(见下文)完全符合我的要求,只是它没有使用我类的私有(private)

c++ - Boost 序列化给出未定义的类型 'boost::STATIC_ASSERTION_FAILURE'

我正在学习使用boost将我的一些C++类序列化。我在接口(interface)中有一个结构。我使用boostserilaize函数像这样序列化这个结构。接口(interface).hstructX{constLongrate;}templatevoidserialize(Archive&ar,uint32version){ar&this->rate;}BOOST_CLASS_EXPORT(X);现在这个头文件将被我的主类使用。比方说main.cpp,这个主类的标题有主要.h#include"Interface.h"classMain{//somestufftemplatevoidse

【C++】类与对象(四)——初始化列表|explicit关键字|static成员|友元|匿名对象

前言:初始化列表,explicit关键字,static成员,友元,匿名对象文章目录一、构造函数的初始化列表1.1构造函数体内赋值1.2初始化列表二、explicit关键字三、static成员四、友元4.1友元函数4.2友元类五、内部类六、匿名对象一、构造函数的初始化列表1.1构造函数体内赋值classDate{public: Date(intyear,intmonth,intday){ //赋值,并非初始化 _year=year; _month=month; _day=day; }private: int_year; int_month; int_day;};构造函数调用之后,在函数体

c++ - 类 C++ 初始化顺序的静态函数成员中的静态数据成员

我有一个宏,用于将键、值添加到注册表映射。(假设AddToMap位于在其他地方定义的全局静态对象上。)在定义不同的类(某种类的注册表)之后,在代码的不同位置调用AddKey宏。代码分成很多.h和.cc文件,依赖关系复杂。我有以下有效的代码:#defineAddKey(key,val)\namespaceNSP_##key{\classA{\public:\staticboolfoo(){\staticbooldummy=AddToMap(#key,#val);\}\};\staticbooldummy_A=A::foo();\}`我想知道静态变量dummy是如何创建和初始化的。当我使用

c++ - VC++ 警告 C4356 : static data member cannot be initialized via derived class

以下代码发出此警告,但它似乎工作正常,因为A::st和B::st都已初始化并且实际上代表相同的字符串。据我了解,这是格式错误的代码,不应编译(我检查了clang)。我想知道为什么VC++不发出错误而是发出警告?#include#includeclassA{public:staticconststd::stringst;};classB:publicA{};conststd::stringB::st="abcd";//warningC4356:'A::st':staticdatamembercannotbeinitializedviaderivedclassintmain(){std::

c++模板扣除头文件中指定模板的数组大小

我正在阅读Meyers关于现代C++的书,我发现其中的代码片段可能很有用:templateconstexprstd::size_tarraySize(T(&)[N])noexcept{returnN;}这个函数推导N对我们来说是一个编译时常量。所以我想在我的代码中应用它:templateconstexprstd::size_tarraySize(T(&)[N])noexcept{returnN;}templateclassA{public:conststaticchar*names[];};templateconstchar*A::names[]={"foo","bar"};templ