C++中各种初始化程序之间的差异

Cys*_*aro 13 c++ c++11

我最近才开始学习C++作为我的10年级课程大纲的一部分,我只知道基础知识,因此简单的答案(如果可能的话)将不胜感激.我在初始化和赋值之间比较困惑.

//Case 1
int a=5; //This is initialization
a=6; //This is assignment
Run Code Online (Sandbox Code Playgroud)

根据我的理解,当你在声明变量时给它一个值来初始化变量.稍后在代码中更改此内容将是一项任务.对?

关于什么 :

//Case 2
int b;
{
//Block of code which does not call variable b
.
.
.
//End of block
}
b=6; // Is this initialization as well?
Run Code Online (Sandbox Code Playgroud)

虽然'b'在我们声明时未初始化,但我们稍后会赋值'6'.我们可以说'b'现在已经初始化了吗?或者初始化和未初始化的术语是否不再适用于'b'?

我读了一个未初始化的变量保存"垃圾值",直到它没有初始化.什么是"垃圾价值"?

以下初始化程序之间有什么区别:'()','{}'和'='?

Pet*_*erO 10

好的,一旦你声明一个变量而没有分配任何值,比如

int b; 
Run Code Online (Sandbox Code Playgroud)

这意味着编译器在内存中保留一些空间来保存值(确切地说,在这种情况下,内存在堆栈上保留).但是,由于您没有为变量赋值,它仍保留值,即之前在内存中分配的空间.这可以是任何事情.那些是垃圾值.

初始化:

int b(1);
Run Code Online (Sandbox Code Playgroud)

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

括号可用于初始化这样的数组(编辑):

int b[] = {1, 3, 5, 7};
Run Code Online (Sandbox Code Playgroud)

并且=只是分配一个值.在处理具有构造函数的更复杂类型(类)时,这与第一个之间的区别只会变得有趣

  • 不.案例2是一项任务.初始化只能在定义点发生(init-bases-members除外). (5认同)

rat*_*nim 5

易说:

取消初始化变量:

 int a;
Run Code Online (Sandbox Code Playgroud)

您声明一个变量,表示您分配内存但不为其分配值.所以如果值设置为0,它的编译器就会依赖它.所以可能有任何东西.多数民众国人,你称之为垃圾价值.

初始化变量:

int a = 0;
Run Code Online (Sandbox Code Playgroud)

您声明一个变量,表示您分配内存并为其分配值.

Assigne价值观:

a = 10;
Run Code Online (Sandbox Code Playgroud)

您将右值(在本例中为10)赋予左值(a).所以你不要分配新的内存.


Lig*_*ica 5

你基本上是对的.

一些较旧的文本将第一次分配给未初始化的变量称为"初始化",尽管这不是严格准确的.

"垃圾值"是任意值.它们看起来很有意义,或者可能完全随机.