草庐IT

初始化OpenStack

全部标签

c++ - Windows 的线程本地存储是否初始化值?

我在MSDN中发现了关于线程本地存储初始值的矛盾。Thispage说:Whenthethreadsarecreated,thesystemallocatesanarrayofLPVOIDvaluesforTLS,whichareinitializedtoNULL.这让我相信,如果我从一个从未为同一索引调用过TlsSetValue的线程中使用有效索引调用TlsGetValue,那么我应该得到一个空指针。Thispage,然而,说:Itisuptotheprogrammertoensure...thatthethreadcallsTlsSetValuebeforecallingTlsGet

C++ 未初始化的类实例数组

我一直在搜索,但找不到这个问题的答案。有没有办法告诉new运算符不调用类构造函数?MyObject*array=newMyObject[1000];这将调用MyObject()一千次!我想自己填充分配的内存,不需要在构造函数中初始化的任何信息。使用malloc()并不是非常和谐的C++代码恕我直言。MyObject*array=(MyObject*)malloc(sizeof(MyObject)*1000); 最佳答案 相当于malloc的C++是分配函数operatornew.你可以像这样使用它:MyObject*array=st

c++ - 如何忽略 MSVC 中未初始化的变量错误

我在使用MSVS编译器时遇到问题,我有以下代码:if(!list){*type=raw_data[*i++];ptr=(char*)&size;ptr[1]=raw_data[*i++];ptr[0]=raw_data[*i++];name=newchar[size+1];memcpy(name,raw_data+*i,size);name[size]='\0';*i+=size;}之后:if(!list){s->name=name;s->name_size=size;}list的值在这个函数中没有改变,但是由于这个错误我无法编译代码:Error1errorC4703:potentia

c++ - 是否已初始化静态 char[] 缓冲区

我在文件范围内有这个:staticcharfoo[256];内存是否在所有平台和构建配置上都初始化为零?(即它是标准的C++)。 最佳答案 Isthememoryinitialisedtozeroonallplatformsandbuildconfigurations?是的,所有非局部变量都是零初始化的。(i.e.isitC++standard)是的。C++113.6.2指定了如何初始化非局部变量。特别是:Variableswithstaticstoragedurationorthreadstoragedurationshallbe

c++ - 与值初始化的迭代器相比,它的定义是否明确?

下面的程序是否调用了未定义的行为?#include#includeintmain(intargc,char*argv[]){for(autoit=std::istream_iterator(std::cin);it!=std::istream_iterator();++it){std::cout这4yearoldquestion说他们不能比较:Iteratorscanalsohavesingularvaluesthatarenotassociatedwithanycontainer.[Example:Afterthedeclarationofanuninitializedpointer

c++ - noexcept 是否适用于从初始化列表传播的异常

假设我有一个这样的构造函数Something(SomethingElse)noexcept:member{SomethingElse,something_that_might_throw()}{...}如果member的构造可以抛出,在这种情况下noexcept是否可以?在上面的例子中,成员变量member是我不知道的类型。旁注:在使用noexcept时是否还有其他需要担心的边缘情况? 最佳答案 #UPDATE:(基于您的编辑):原始答案适用于函数block作用域内的所有内容(包含构造函数,包括构造函数-初始化列表)。你为什么不tr

c++ - 为什么C++中的大括号初始化解决了STL容器的初始化问题?

我正在阅读EffectiveModernC++,在关于大括号初始化的部分。Evenwithseveralinitializationsyntaxes,thereweresomesituationswhereC++98hadnowaytoexpressadesiredinitialization.Forexample,itwasn’tpossibletodirectlyindicatethatanSTLcontainershouldbecreatedholdingaparticularsetofvalues(e.g.,1,3,and5)然后他显示:std::vectorv{1,3,5};

c++ - 我可以在 C++ 中创建一个匿名的、大括号初始化的聚合吗?

可以创建一个通过构造函数参数初始化的匿名对象,例如在下面的return语句中。structS{S(inti_,intj_):i(i_),j(j_){}inti,j;};Sf(){returnS(52,100);}intmain(){cout但是,是否可以类似地创建一个用大括号初始化器初始化的匿名聚合?例如,是否可以将下面的f()主体压缩为一个没有“s”的return语句?structS{inti,j;};Sf(){Ss={52,100};returns;}intmain(){cout 最佳答案 您不能在当前版本的C++中使用。你将能

c++ - 使用默认构造函数初始化 std::vector

我有一个类字段,它是一个std::vector。我知道我希望这个vector包含多少个元素:N。如何用N个元素初始化vector? 最佳答案 std::vector有一个构造函数声明为:vector(size_typeN,constT&x=T());您可以使用它来构造包含N个x拷贝的std::vector。x的默认值是初始化值T(如果T是具有默认构造函数的类类型,则值初始化是默认构造)。使用此构造函数初始化std::vector数据成员非常简单:structS{std::vectorx;S():x(15){}}

c++ - 扩展的初始化列表和数组

我有简单的功能,例如:voidfun(vectorvec){//...}voidfun(int*smth){//...}当我在我的程序中写的时候没有。fun({2,3});使用vector参数让我觉得很有趣,我知道它在新的C++扩展初始化列表中,但我想使用新的C++并告诉编译器这只是一个int数组,我该怎么做?编辑:在1行中完成它会很好:) 最佳答案 您不能用数组初始化指针,因为指针不是数组(尽管在某些情况下出现这种情况,但事实并非如此)。您必须传递一个指向预先存在的数组的指针。或者,使用vector重载——当然,你更喜欢这个?!如