c++ 变量定义 的初始化规则

当定义没有初始化式的变量(如int i;)时,系统有可能会为我们进行隐式的初始化。至于系统是否帮我们隐式初始化变量,以及为变量赋予一个怎样的初始值,这要取决于该变量的类型以及我们在何处定义的该变量。
      
      1】内置类型变量的初始化
           内置变量是否自动初始化,取决于该变量定义的位置。
           ①在全局范围内的内置类型变量均被编译器自动初始化为0值

 1 #include<iostream>
 2
 3 using namespace std;
 4
 5 //全局范围内的部分内部变量
 6 int gi;  //被自动初始化为0
 7 float gf;  //被自动初始化为0.0
 8 double gd;  //被自动初始化为0.0
 9 char gc;  //被自动初始化为‘\0‘
10
11 int main(int argc, char **argv)
12 {
13   return EXIT_SUCCESS;
14 }

②在函数体内定义的内置类型变量值随机(有的编译器可能会为你初始化为0,但千万别依赖于这种可能行为,因为它会给你的程序带来未定义的行为)

 1 #include<iostream>
 2
 3 using namespace std;
 4
 5 int main(int argc, char **argv)
 6 {
 7   //局部范围内的部分内部变量
 8   int i;  //不被自动初始化,值随机(有可能是0,依编译器实现而定)
 9   float f;  //不被自动初始化,值随机(有可能是0,依编译器实现而定)
10   double d;  //不被自动初始化,值随机(有可能是0,依编译器实现而定)
11   char c;  //不被自动初始化,值随机(有可能是0,依编译器实现而定)
12
13   return EXIT_SUCCESS;
14 }

③内置类型数组的初始化规则同上

#include<iostream>

using namespace std;

//全局范围内的内置类型数组
int gIntArr[5];  //5个元素都被初始化为0

int main(int argc, char **argv)
{
  //局部范围内的内置类型数组
  int intArr[5];  //未被初始化

  return EXIT_SUCCESS;
}

2】类类型变量的初始化
           类类型变量是通过构造函数进行初始化的,不论类类型变量在哪里(全局或者局部)定义,该类类型变量的构造函数(默认构造函数或者指定的带参构造函数)总会被调用。
           想要知道构造函数在各种情况下如何初始化类中数据成员的,我们必须首先了解构造函数的初始化发生在何时。

 1 //构造函数中的初始化发生在构造函数的初始化列表中
 2 //而非构造函数体中
 3 class Foo
 4 {
 5   public:
 6     Foo(int i):_integer(i)  //初始化列表中进行的是初始化
 7     {
 8       //这里是构造函数的函数体
 9       //在这里进行的是赋值操作,而不是初始化
10       _integer = i;
11     }
12   private:
13     int _integer;
14 };

现在我们知道,构造函数的初始化是发生在初始化列表中的,那么,对于初始化列表中没有显示进行初始化的内置类型变量来说,其初始化规则就与上述内置类型变量的规则相同了。
           下面我们就一起来探索这个问题:

 1 #include<iostream>
 2 using namespace std;
 3
 4 class Foo
 5 {
 6   public:
 7     Foo(void):_explicitInit(1024){}
 8   private:
 9     int _explicitInit;  //在构造函数初始化列表中
10                         //显式初始化的内置类型变量
11     int _implicitInit;  //没有在构造函数中显式初始
12                         //化的内置类型变量
13 };
14
15 Foo gF;  //全局范围内的类类型变量,_explicitInit被
16          //显式初始化为1024,_implicitInit被自动初始
17          //化为0
18
19 int main(int argc, char **argv)
20 {
21   Foo f; //局部范围的类类型变量,_explicitInit被
22          //显式初始化为1024,_implicitInit不会被
23          //自动初始化,值随机
24
25   return EXIT_SUCCESS;
26 }

本文出自 “Bill_Hoo专栏” 博客,请务必保留此出处http://billhoo.blog.51cto.com/2337751/733279

c++ 变量定义 的初始化规则

时间: 2024-10-12 19:40:33

c++ 变量定义 的初始化规则的相关文章

C++变量的默认初始化规则

定义没有初始化式的变量时,系统有时候会帮我们初始化变量.系统如何初始化取决于变量的类型以及变量定义的位置. 内置类型变量是否自动初始化取决于变量定义的位置.函数体外定义的变量初始成0:函数体内定义的变量不进行自动初始化.除了用作赋值操作的左操作数,其他任何使用未初始化变量的行为都是未定义的,不要依赖未定义行为. 以int类型为例,一段简单的测试代码: #include <iostream> using namespace std; int a; int main() { int b; cout

Go语言基础变量定义及初始化

package main import "fmt" func main(){ //变量定义 var v1 int var v2 string var v3 [10] int //数组 var v4 [] int //数组切片 var v5 struct{ f int } var v6 *int //指针 var v7 map[string] int //key 为string value为int的map var v8 func (a int) int //变量初始化 var var1

GoLang学习之变量定义和初始化

变量命名原则 go语言的变量名有字母数字和下划线组成,首字母不能为数字,但是字母不仅仅只限于英文字母,所有的UTF-8字符都是可以的. 变量声明和初始化方式 使用var关键字 var a int = 9 var str string ="jisuanji" 注意,Go语言变量类型放在变量名之后! 如果上面的代码段没有初始化值,那么变量就会被初始化为对应类型的零值. var a int 这个代码片段声明了一个int类型变量a,并把a初始化为int零值,即0. 忽略类型 这种声明和初始化变

转载-定义时初始化和构造器初始化的差异

概述 在Java中使用一个变量时,如果我们不给变量初始化,则编译器会自动给变量初始化赋值,使得所有的变量在使用前都能得到恰当的初始化. 对于方法中的局部变量,如果不初始化就使用,则会报错(类似"The local variable i may not have been initialized"的错误信息). 举例 Dog类代码如下: public class Dog implements Serializable { private static final long serialV

C++ 初始化形式、变量初始化规则、类构造函数的初始化列表

类构造函数的初始化列表,举例 一个对象的构造分两部分,首先是分配空间,然后初始化. 只要有对象生成,不管是以什么形式生成,都会调用构造函数进行初始化. 然后下面有个例子,在蓝色区域Big类的复制构造函数中,使用初始化列表进行成员的初始化(方法1)没有问题,而如果不使用初始化列表.直接在函数里用里面注释掉的代码(方法2)则会报错:Base类没有合适的构造函数. // W3-课程作业2-4.cpp : Defines the entry point for the console applicati

C++中不同变量的初始化规则

当定义没有初始化式的变量(如int i;)时,系统有可能会为我们进行隐式的初始化.至于系统是否帮我们隐式初始化变量,以及为变量赋予一个怎样的初始值,这要取决于该变量的类型以及我们在何处定义的该变量. 1]内置类型变量的初始化     内置变量是否自动初始化,取决于该变量定义的位置.     ①在全局范围内的内置类型变量均被编译器自动初始化为0. #include<iostream> using namespace std; //全局范围内的部分内部变量 int gi; //被自动初始化为0 f

你好,C++(7)第三部分 C++世界众生相 3.2.1 变量的定义与初始化

第3部分 C++世界众生相 在听过了HelloWorld.exe的自我介绍,完成了与C++世界的第一次亲密接触后,大家是不是都急不可待地想要一试身手,开始编写C++程序了呢?程序的两大任务是描述数据和处理数据.那么,接下来我们将面临的第一个问题就是:如何在C++中描述数据? 3.1  C++中的数据类型 编程就是使用程序设计语言来描述和表达现实世界.现实世界中有很多客观存在的事物,例如,电脑.人.汽车等.我们总是用各种数据来描述这些事物的不同属性,比如,我们用一个字符串“ChenLiangqia

C++ 变量初始化规则

 定义没有初始化式的变量时,系统有时候会帮我们初始化变量.系统如何初始化取决于变量的类型以及变量定义的位置. 内置类型变量是否自动初始化取决于变量定义的位置.函数体外定义的变量初始成0:函数体内定义的变量不进行自动初始化.除了用作赋值操作的左操作数,其他任何使用未初始化变量的行为都是未定义的,不要依赖未定义行为. 以int类型为例,一段简单的测试代码: #include <iostream> using namespace std; int a; int main() { int b; cou

(转载)你好,C++(7)第三部分 C++世界众生相 3.2.1 变量的定义与初始化

你好,C++(7)第三部分 C++世界众生相 3.2.1 变量的定义与初始化 第3部分 C++世界众生相 在听过了HelloWorld.exe的自我介绍,完成了与C++世界的第一次亲密接触后,大家是不是都急不可待地想要一试身手,开始编写C++程序了呢?程序的两大任务是描述数据和处理数据.那么,接下来我们将面临的第一个问题就是:如何在C++中描述数据? 3.1  C++中的数据类型 编程就是使用程序设计语言来描述和表达现实世界.现实世界中有很多客观存在的事物,例如,电脑.人.汽车等.我们总是用各种