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

时间:2015-08-23 08:10:59

标签: c++ c++11

我最近才开始学习C ++作为我的10年级课程大纲的一部分,并且我只知道基础知识,因此我们将会感谢简单的答案(如果可能的话)。 我在初始化和分配之间相当困惑。

//Case 1
int a=5; //This is initialization
a=6; //This is assignment

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

怎么样:

//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'了吗?

我读了一个未初始化的变量保持"垃圾值"直到它没有初始化。究竟是什么"垃圾值"?

以下初始值设定项之间有何区别:'()',' {}'和' ='?

4 个答案:

答案 0 :(得分:10)

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

int b; 

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

初始化者:

int b(1);

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

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

int b[] = {1, 3, 5, 7};

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

答案 1 :(得分:5)

易说:

取消初始化变量:

 int a;

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

初始化变量:

int a = 0;

您声明一个变量,意味着您分配内存并为其分配值。

Assigne值:

a = 10;

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

答案 2 :(得分:5)

你基本上是对的。

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

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

答案 3 :(得分:3)

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

可以通过复制构造函数来完成,即int a = 1;int a(1);,它可以通过赋值来完成,即int a; a = 1;,它可以通过函数来​​完成,即int a; init(a);。初始化不是“语言事物”,它只是指定未指定值的行为。

“垃圾值”是任意值。一些存储将被赋予未初始化的对象,并且尝试读取它将产生该存储器中发生的任何值。