草庐IT

Initialization

全部标签

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++ - 为什么 const 左值引用可以引用可变右值引用?

在C++11中,const左值引用可以用可变右值引用来初始化。右值引用的值然后可以更改,从而对const左值所引用的内容产生可见的突变。这是一个例子:int&&rval=3;constint&lval=rval;cout输出(来自clang3.2和gcc4.8.2,均使用-std=c++11):lval=3rval=3lval=4我会猜测这样做的原因是不能通过左值引用修改所指对象,但可以通过右值引用修改它。但是,我不明白为什么允许const左值引用可变对象。有人能解释一下这样做的理由并给出处理这种情况的最佳做法吗?另外,是否还有其他类似的例子可以颠覆constness?

C++ for循环变量的生命周期很奇怪

for(inti=0;i代码的输出是123456789。我想知道为什么在执行变量声明时for循环中的变量n没有被初始化。 最佳答案 您永远不会将n初始化为特定值。当您调用intn时,C++默认不会执行此操作。相反,它只是保留一个整数大小的内存块。因此,当您调用n++时,程序只是获取该内存中恰好存在的任何值并递增它。由于您是快速连续地执行此操作而不是在其间创建新变量,因此它恰好一遍又一遍地获取相同的内存。正如@NicolasBuquet指出的那样,编译器优化也可能与选择相同内存块的一致性有关。如果您要为n分配一个值(即intn=1;)

c++ - 下面的初始化是如何良构的?

[class.conv.ctor]/2中的示例包含以下初始化:Za3=Z(1);//OK:directinitializationsyntaxused这如何被视为直接初始化语法? 最佳答案 Z(1)将直接初始化纯右值。prvalue然后将用于初始化对象。通过rulesofguaranteedelision,没有临时后跟拷贝。纯右值直接初始化对象。因此,Za3=Z(1);完全等同于Za3(1);。在C++17之前的版本中,这将执行纯右值临时变量的直接初始化,然后将临时变量(几乎肯定会被删除)复制到对象a3中。无论拷贝是否被省略,纯右值

c++ - 未初始化的 boolean 变量不一致

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhydoIseestrangevalueswhenIprintuninitializedvariables?Funwithuninitializedvariablesandcompiler(GCC)我想知道我在解决代码问题时遇到的一个神秘问题。生产中的代码有一个未初始化的boolean变量,库正在检查这个boolean值。在LIVE站点中,此变量始终表现为TRUE开发环境中的相同代码始终表现为FALSE。我知道,由于LIVE和DEV之间的环境差异,未初始化的bool变量可能具有未定义的值。但这是我的问题。如

c++ - 为什么声明为类成员的 const 变量仍然可以修改?

如果一个已经被赋值的const变量仍然可以被重新赋值,那么它不是一个const?举个例子:structss{constintm=1024;ss(){}ss(intm):m(m){}};sssa;sssb(-1);cout哇m毕竟不是常数!>/*Ouput:>>1024>-1>>*/ 最佳答案 ss(intm):m(m){}这表示当类ss被初始化时,它的成员m使用参数m被初始化。成员m确实不能修改,但可以初始化,就像任何其他const对象一样。请注意,如果我们改为这样做ss(intm){this->m=m;}那么我们就会遇到问题,因为

C++:int x[+30] 是有效的声明吗?

这几天一直在研究数组。我以这种方式遇到了一个数组的声明和它的元素的初始化:intx[+30];x[+1]=0;这让我有点困惑。我有一个想法,当我们写的时候:x[n]=0;那么它的意思是:*(x+n)=0;然后写x[+1]将意味着*(x++1)这似乎是无效的。请纠正我在理解这个概念时所犯的错误。 最佳答案 x[n]表示*((x)+(n))(注意黑色)和x[+1]表示*((x)+(+1))。这是有效的。N33375.2.1订阅TheexpressionE1[E2]isidentical(bydefinition)to*((E1)+(E2

c++ - 什么时候必须使用初始化列表来初始化 C++ 类成员?

假设我有std::mapm_someMap作为A类的私有(private)成员变量两个问题:(我问的唯一原因是因为我遇到了这样的代码)这一行的目的是什么:A::A():m_someMap()现在我知道这是初始化了,但是你必须那样做吗?我很困惑。std::mapm_someMap的默认值是多少?,C#还定义了int、double等总是初始化为defualt0并且对象为null(至少在大多数情况下)那么C++中的规则是什么?对象被默认初始化为null和原语初始化为垃圾?当然,我正在考虑实例变量。编辑:另外,由于大多数人指出这是一种样式选择而不是必需的,那么:A::A():m_someMap