草庐IT

初始化OpenStack

全部标签

c++ - char[](c-string) 的初始化标准

考虑以下代码:intmain(){charhi[5]="Hi!";printf("%d",hi[4]);}将打印什么?更重要的是,在最新C++标准中,标准中是否提及将打印的内容?如果有提及,它在哪里?由于某种原因,很难找到关于此的最新信息,而且各种来源的信息相互矛盾。我试过en.cppreference.com和cplusplus.com,前者没有任何信息,后者声称值未确定。然而,usingnamespacestd;intmain(){charmySt[1000000]="Hi!";for(inti=0;i这在我的系统上只打印0、1和2,所以我希望“rest”被初始化为“\0”。另外据

c++ - 从未使用过的无效默认成员初始值设定项

请考虑以下代码:templatestructTest{Test()=default;explicitTest(constT&arg):m_member(arg){}Tm_member{};};intmain(){Testt1;intv2=34;Testt2(v2);//(!)return0;}上面的代码是否应该编译并且没有未定义的行为?标记(!)的行使用引用类型的参数实例化类模板Test。在这种情况下,成员Test::m_member的默认初始化器是无效的(好吧,引用必须用某个对象初始化)。但另一方面,程序中从未使用过默认构造函数(唯一可以使用该默认初始化程序的构造函数),因此不应实例

C++ 模板静态成员指针初始化

我有一个模板类,它有一个指向成员的静态指针,如下所示:templateclassQueue{T*head;T*tail;staticT*T::*pnext;};我的问题是如何编写指向成员的静态指针的初始化程序。我尝试了明显的情况:templateT*Queue::*pnext(nextptr);但这没有用。有什么想法吗? 最佳答案 你真的需要一个与模板参数具有相同值的模板静态成员变量吗?唯一的用途是它的值在程序的整个生命周期内发生变化,但我真的想不出任何情况会产生比造成困惑更多的好处。

c++ - 为什么要编译(在初始化之前在函数中使用)?

考虑这段代码(使用CString因为它很熟悉并且在未构造时很容易看到,但类没有什么特别之处),在VisualStudio2008下测试:CStringDoSomething(constCString&sString){returnsString;}CStringsTest1=DoSomething(sTest1);//Compiles(nowarnings),failsatruntimeCStringsTest2(DoSomething(sTest2));//Doesn'tcompileCStringsTest3;sTest3=DoSomething(sTest3);//Compile

c++ - 在逗号运算符的 LHS 中初始化匿名互斥锁持有类实例

假设我有这样的代码:#include"boost/thread/mutex.hpp"usingboost::mutex;typedefmutex::scoped_locklock;mutexmut1,mut2;voidFunc(){//...}voidtest_raiicomma_1(){lockmut1_lock(mut1);Func();}voidtest_raiicomma_2(){(lock(mut1)),Func();}voidtest_raiicomma_3(){(lock(mut1)),(lock(mut2)),Func();//Warning!}intmain(){te

c++ - 在没有空构造函数的情况下声明未初始化的变量

考虑DUPoint类,其声明如下所示。假设此代码出现在名为DUPoint.h的文件中:#includeclassDUPoint{public:DUPoint(intx,inty);intgetX()const;intgetY()const;voidsetX(intx);voidsetY(inty);voidprint();private:intx_;inty_;};您是否真的不能使用诸如DUPointP;之类的语句声明未初始化的DUPoint变量,因为它没有空构造函数,所以使用当前配置的此类? 最佳答案 是的,如果有用户声明的构造函

c++ - (静态初始化/模板实例化)工厂模式的问题

为什么以下代码会引发异常(在调用map::at的createObjects中)或者可以查看代码(及其输出)here有趣的是,如果注释行在microsoft和gcc编译器(参见here)中都被取消注释,代码将按预期工作,这甚至可以将initMap作为普通静态变量而不是静态getter使用。我能想到的唯一原因是静态registerHelper_对象(factory_helper_)和std::map对象(initMap)是错误的,但是我看不出这是怎么发生的,因为map对象是在第一次使用时构造的,而且是在factory_helper_构造函数中构造的,所以一切都应该没问题,不是吗?更令我惊讶

c++类列表,无需初始化它们以使用静态函数

我可能会以一种奇怪的方式问这个问题,但我不确定还能怎么问。我想要一个类列表,而不是对象列表。这样我就可以调用静态函数而无需创建对象。 最佳答案 此时我真的更喜欢函数指针:structA{voidSomeFunc(int);};structB{voidAnotherFunc(int);};typedefvoid(*Function)(int);std::vectorvec;vec.push_back(A::SomeFunc);vec.push_back(B::AnotherFunc);for(Functionf:vec){f(2);}

c++ - 在 C++ 函数头中初始化变量

我遇到过一些看起来像这样的C++代码(针对本文进行了简化):(这里是位于someCode.hpp中的函数原型(prototype))voidsomeFunction(constdouble&a,double&b,constdoublec=0,constdouble*d=0);(这里是函数体的第一行位于#include的someCode.hpp的someCode.cpp)voidsomeFunction(constdouble&a,double&b,constdoublec,constdouble*d);我可以合法地调用someFunction使用:someFunction(*ptr1,

c++ - 具有静态存储持续时间的对象中未初始化的指针是否初始化为 NULL 或全零?

出于好奇,也因为我手头没有标准拷贝:如果空指针不是由全零模式表示的实现,具有静态存储持续时间的对象的未初始化指针成员将被初始化为正确的空指针值,还是初始化为全零值?更少的标准语言,更多的代码:structfoo{void*p;};foof;给定0x00000001的NULL指针表示,对于main()开头的f.p的按位表示,我能期待什么? 最佳答案 标准说(8.5/4):Tozero-initializeanobjectoftypeTmeans:—ifTisascalartype,theobjectissettothevalue0(z