C+中不同初始值设定项之间的差异+; 我最近才开始学习C++作为我的第十年级教学大纲的一部分,我只知道基础> ,因此简单的答案(如果可能的话)将被赏识。 我把初始化和赋值搞混了 //Case 1 int a=5; //This is initialization a=6; //This is assignment

C+中不同初始值设定项之间的差异+; 我最近才开始学习C++作为我的第十年级教学大纲的一部分,我只知道基础> ,因此简单的答案(如果可能的话)将被赏识。 我把初始化和赋值搞混了 //Case 1 int a=5; //This is initialization a=6; //This is assignment,c++,c++11,C++,C++11,据我所知,当您在声明变量时给它一个要保存的值时,它就被初始化了。稍后在代码中更改此选项将是一项任务。对吧? 那么: //Case 2 int b; { //Block of code which does not call variable b . . . //End of block } b=6; // Is this initialization as well? 虽然在声明时“b”未初始化,但我们稍后会指定值“6”。我们可以说“b”现在已经初始化了吗?或者初始化和未初始化的术语是否不再适

据我所知,当您在声明变量时给它一个要保存的值时,它就被初始化了。稍后在代码中更改此选项将是一项任务。对吧?

那么:

//Case 2
int b;
{
//Block of code which does not call variable b
.
.
.
//End of block
}
b=6; // Is this initialization as well?
虽然在声明时“b”未初始化,但我们稍后会指定值“6”。我们可以说“b”现在已经初始化了吗?或者初始化和未初始化的术语是否不再适用于“b”

我读取了一个未初始化的变量,该变量在未初始化之前一直保存“垃圾值”。“垃圾值”到底是什么


以下初始值设定项之间有什么区别:“()”、“{}”和“=”?

好的,一旦您声明了一个变量而没有赋值,比如

int b; 
这意味着编译器在内存中保留一些空间来保存值(确切地说,在这种情况下,内存保留在堆栈上)。但是,由于您没有给变量赋值,它仍然保存着以前在内存中分配的空间所具有的值。这可以是任何东西。这些都是垃圾值

初始化者:

int b(1);
将值1赋值为(通常,它调用类型的构造函数)

括号可用于初始化如下数组(编辑):

并且=只分配了一个值。只有在处理更复杂的类型(类)时,这一点与第一点之间的区别才会变得有趣,因为在更复杂的类型(类)中,构造函数很容易说:

取消初始化变量:

 int a;
int a = 0;
a = 10;
您正在声明一个变量,这意味着您分配了内存,但没有为其赋值。因此,如果该值设置为0或不设置为0,则其编译器将依赖于该值。所以里面可能有任何东西。这就是你所谓的垃圾值

初始化变量:

 int a;
int a = 0;
a = 10;
您正在声明一个变量,这意味着您分配内存并为其赋值

分配值:

 int a;
int a = 0;
a = 10;

将右值(在本例中为10)分配给左值(a)。所以你不需要分配新的内存。

你基本上是对的

一些较旧的文本将未初始化变量的第一个赋值称为“初始化”,尽管这并不严格准确


“垃圾值”是任意值。它们可能看起来有意义,也可能是完全随机的。

初始化用于初始化未初始化的值

它可以通过复制构造函数来完成,即
inta=1
inta(1),可通过赋值方式完成,即
inta;a=1,可以通过一个函数完成,即
inta;init(a)。初始化不是“语言的东西”,它只是指定一个未指定值的行为


“垃圾值”是任意值。将为未初始化的对象提供一些存储,尝试读取它将产生内存中发生的任何内容的值

这似乎是相关的:问题太宽泛了。请每个问题问一个问题。我已经回答了第一部分。对于“有什么不同”部分,存在一些问题。感谢您对垃圾值和初始值设定项的解释。你能告诉我案例2是否也是初始化的一个例子吗?另外,您前面提到的构造函数是什么?是的,案例2是初始化。关于构造函数,这将是一个相当大的话题。当你想了解它的时候,你可以在网上找到很多教程,比如:不,案例2是一个作业。初始化只能在定义点进行(init base成员除外)。
int[]b
?我认为您有点困惑,说声明变量保留内存有点误导。它不做这种事。它声明了名称。就标准而言,内容未定义且不存在。此时变量包含垃圾肯定不是真的。它不包含任何可观察的内容。