草庐IT

initialization

全部标签

c++ - 所有类型的零值?

在C++11中,有没有一种方法可以将算术类型和类类型的值初始化为零(算术类型在运行时绝对没有开销)?templatevoidmyFunction(T&x){x=0;//HowtomakethisworksforT=doublebutalsoforT=std::string?} 最佳答案 您可以使用默认构造函数来“清除”变量:templatevoidclear(T&v){v=T();}这将适用于所有原始类型、指针和具有默认构造函数和赋值运算符的类型(默认情况下所有类都将具有,除非被告知不要这样做,或者它们被保护/私有(private)

c++ - 是否必须重置 std::array 元素?

std::arraymyInts;std::arraymyBools;可以将myInts和myBools的元素假设为false和0,还是我应该手动填充数组? 最佳答案 元素将被设置为随机值,但您可以确保像这样对它们进行值初始化:std::arraymyInts{};//allzeroesstd::arraymyBools{};//allfalse所以元素不必重新设置,它们可以被初始化为特定的值。您还可以将元素初始化为不同的值:std::arraymyInts{1,2,33,44};std::arraymyBools{true,fal

c++ - 静态类成员的初始化。为什么要构造函数?

当我想将静态指针作为类的成员时,我需要constexpr来使用nullptr进行初始化。classApplication{private:constexprstaticApplication*app=nullptr;}有人可以解释一下为什么我需要这样做吗?我找不到在编译时必须存在静态变量的确切原因。 最佳答案 那是因为您在类定义中对其进行了初始化。这只允许常量整数和枚举类型(始终)和constexpr数据成员(C++11起)。通常,您会在定义它的地方(在类之外)对其进行初始化,如下所示:Application.hclassAppli

c++ - 为什么添加 move 构造函数会禁用初始化列表?

用一个简单的struct比如structFoo{inti;};我可以使用初始化列表创建一个新实例;无需编写构造函数:Foofoo{314};如果我现在添加一个move构造函数structBar{inti;Bar(Bar&&other){i=other.i;}};初始化器不再工作,我也必须添加一个构造器:Bar(inti):i(i){}我猜这种行为与thisanswer有点相关(对于user-definedmove-constructordisablestheimplicitcopy-constructor?),但更多细节会更好。编辑:如答案所示,这与添加构造函数有关。如果我只添加一个m

c++ - 这是模棱两可还是完全没问题?

这段代码是模棱两可的还是完全没问题(通过标准批准/对现有的任何编译器都有一致的行为)?structSCustomData{intnCode;intnSum;intnIndex;SCustomData(intnCode,intnSum,intnIndex):nCode(nCode),nSum(nSum),nIndex(nIndex){}};编辑:是的,我指的是成员变量与构造函数的形参同名。 最佳答案 不,在这种情况下没有歧义,但请考虑以下内容:structSCustomData{//...voidSetCode(intnCode){/

c++ - 结构数组成员的默认值

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:IntitialzinganarrayinaC++classandmodifiablelvalueproblem如this所示问题,可以将构造函数赋予结构以使其成员获得默认值。您将如何继续为结构内数组的每个元素提供默认值。structfoo{intarray[10];intsimpleInt;foo():simpleInt(0){};//onlyinitializetheint...}有没有什么方法可以像初始化int一样在一行中完成此操作?

c++ - 未初始化变量的值是如何确定的?

给定一个程序:intmain(){shortmyVariableName1;//storesfrom-32768to+32767shortintmyVariableName2;//storesfrom-32768to+32767signedshortmyVariableName3;//storesfrom-32768to+32767signedshortintmyVariableName4;//storesfrom-32768to+32767unsignedshortmyVariableName5;//storesfrom0to+65535unsignedshortintmyVaria

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

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

c++ - 为什么我们在 C++11 中使用 initializer_list?

我读过initializer_list是用于接受未知数量的单一类型参数的函数。但我们为什么需要它?为什么我们不能改用普通容器,例如vector或list?我尝试了以下代码,它有效。#include#include#includeusingnamespacestd;voidf(constlist&slst){for(autos:slst)cout 最佳答案 虽然您的代码没有明确提及它,但您实际上在constructoroflist中使用了initializer_list:list(std::initializer_listinit,c

c++ - 如何编写正确的 std::initializer_list 构造函数

考虑以下代码:#include#includestructC{std::vectora;std::stringb;boolc;};voidprintC(constC&c){//...}intmain(){printC({{1,2,3},"ehlo",false});}这行得通,因为编译器可以为我生成合适的构造函数。但是,如果我将结构C更改为:structC{std::vectora;std::stringb;boolc;C(){c=false;}};printC调用停止工作,因为编译器停止生成适当的构造函数。我尝试使用std::initializer_list为自己编写一个构造函数,但