草庐IT

Initialization

全部标签

c++11 聚合初始化之前的值初始化

我试图理解@bolov对问题Deleteddefaultconstructor.Objectscanstillbecreated...sometimes的第一个接受的答案[1]我好像在那里发现了一个错误,所以它搞砸了整个解释。@bolov解释了为什么这段代码在c++11中成功编译:场景Astructfoo{foo()=delete;};//AllbellowOK(noerrors,nowarnings)foof=foo{};foof={};foof{};//willuseonlythisfromnowon.为什么这段代码无法在C++11中编译:场景Cstructfoo{foo()=de

c++ - 在构造函数初始化列表中使用 placement new 的语法是什么

假设我有一个类classMyClassintbuf[10];public:MyClass(inti){new(&buf)OtherClass(i);//Howtomovethistoconstructorinitializelist?}只需将该行复制到之后的位置:不起作用。 最佳答案 我不确定您将如何使用构造的对象;我想MyClass有一个指向对象的数据成员指针,然后像这样初始化指针:classMyClass{intbuf[10];OtherClass*p;public:MyClass(inti):p(new(&buf)OtherC

c++ - 为什么定义静态成员变量时不遵循定义顺序?

我知道不同翻译单元的静态变量初始化顺序的问题。但是,我的问题是在一个翻译单元内,实际上是在一个结构内:templatestructSlidingTile{usingAllActions=std::array;usingAllMDDeltas=std::array;intmdDelta(inti)const{returnmdDeltas_[i];}staticAllActionscomputeAllActions(){std::coutconsttypenameSlidingTile::AllActionsSlidingTile::allActions_=SlidingTile::com

c++ - 让编译器初始化数组或手动遍历数组进行初始化更快吗?

是intarray[100]={};比快intarray[100];for(inti=0;i或者它们相等?有什么区别? 最佳答案 非静态分配数组的初始化很可能对两个所示变体以相同的方式实现。您将必须测量或查看生成的程序集。对于静态分配的数据(C++中的namespacescope数据),在UNIX上有BSSsegment对于零初始化数据和datasegment对于非零初始化数据。BSS段中的符号位置仅指定位置和大小,它们的内容隐式为零并且在可执行文件中不占用大小。我当然会尝试利用大数组的零初始化。(然而,大部分时间我都在处理大数组,

c++ - GCC 中的 __attribute__((init_priority(X)))

我在GCC中使用__attribute__((init_priority(X)))是这样的:Type1__attribute__((init_priority(101)))name1=value1;Type2__attribute__((init_priority(102)))name2=value2;在不同的源文件中。比方说file1.cpp和file2.cpp。如果我在同一个库中使用它,它会按预期工作,name1在name2之前初始化,但如果我在不同的库中使用它,则初始化顺序不是预期的顺序。我在gcc文档中读到这应该像我期望的那样在不同的库中工作,以定义初始化的顺序。我使用它的方式

c++ - 从 2 个 vector 的串联构造一个 vector

有没有办法将vector构造为2个vector的串联(除了创建辅助函数?)例如:constvectorfirst={13};constvectorsecond={42};constvectorconcatenation=first+second;我知道vector没有像string这样的加法运算符,但这是我想要的行为。这样concatenation将包含:13和42。我知道我可以像这样初始化concatenation,但它阻止我进行concatenationconst:vectorconcatenation=first;first.insert(concatenation.end(),

c++ - 未知模板类型的默认值或零值

假设模板函数templateTfoo(){//...//Erroroccuredif(error)return0;//...}应该返回0、0.0f、nullptr,...取决于T类型,发生错误时。如何获取未知模板类型的0?在C#中,您可以编写default(T)来执行此操作。如何在C++中执行此操作? 最佳答案 您可以像returnT();或returnT{};(C++11起)那样使用valueinitialization,或者只是return{};(参见listinitialization(sinceC++11))以返回T的默认值

c++ - 给定翻译单元中文件级静态变量的顺序是否始终相同?

我有一个程序分成两个源文件:example.cpp#includeclassA{public:A(intx){::std::cout例子__main.cppintmain(intargc,constchar*argv[]){return0;}这个程序的输出是否保证是:InA(1)InA(2)在所有平台和编译器上?如果是这样,它在标准中的哪个位置这样说?如果我使用命名空间并且first和second出现在不同的命名空间中,这有关系吗?如果它们不是静态的并且我使用的是匿名命名空间怎么办? 最佳答案 是的,如果声明出现在同一个翻译单元中,

c++ - Cpp 中的私有(private)静态数据成员.. 只能在其定义时初始化,而类内初始化无效?

在头文件中初始化我得到以下错误:invalidin-classinitializationofstaticdatamemberofnon-integraltype'bool[8]'如果我尝试在.cpp中初始化,我得到:'boolIon::KeyboardInput::key[8]'isastaticdatamember;itcanonlybeinitializedatitsdefinition标题如下:enumMYKEYS{KEY_UP,KEY_DOWN,KEY_LEFT,KEY_RIGHT,KEY_W,KEY_S,KEY_A,KEY_D};classKeyboardInput{pub

c++ - 结构参数的默认值

假设我有以下结构:structmyStruct{intx;inty;intz;intw;};我想在调用以下函数时将此结构初始化为默认值。如果有帮助,我正在寻找一个简单的零初始化。voidmyFunc(myStructparam={0,0,0,0}){...}然而这段代码给我编译错误。我试过VS2003和VS2008。注意:我看过其他提到使用构造函数的答案。但是,我希望用户看到我正在使用哪些值进行初始化。 最佳答案 将默认构造函数添加到您的myStruct将解决您的问题。structmyStruct{myStruct():x(0),y