C++中不同变量(内置/类 类型) 的初始化规则

 当定义 没有初始化式 的变量(如int i;)时,系统 有可能 会为我们进行隐式的初始化。至于系统是否帮我们隐式初始化变量,以及为变量赋予一个怎样的初始值,这要取决于该 变量的类型 以及我们在 何处定义的该变量 。


一、内置类型变量的初始化
     内置变量“是否”自动初始化,取决于该变量定义的位置
     ①在全局范围内的内置类型变量均被编译器自动初始化为0。

#include<iostream>
using namespace std;
//全局范围内的部分内部变量
int gi;  //被自动初始化为0
float gf;  //被自动初始化为0.0
double gd;  //被自动初始化为0.0
char gc;  //被自动初始化为'\0'
int main(int argc, char **argv)
{
  return EXIT_SUCCESS;
}


 

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

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

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

#include<iostream>
using namespace std;
//全局范围内的内置类型数组
int gIntArr[5];  //5个元素都被初始化为0
int main(int argc, char **argv)
{
  //局部范围内的内置类型数组
  int intArr[5];  //未被初始化
  return EXIT_SUCCESS;
}

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

//构造函数中的初始化发生在构造函数的初始化列表中
//而非构造函数体中

class Foo
{
  public:
    Foo(int i):_integer(i)  //初始化列表中进行的是初始化
    {
      //这里是构造函数的函数体
      //在这里进行的是赋值操作,而不是初始化
      _integer = i;
    }
  private:
    int _integer;
};


 

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

#include<iostream>
using namespace std;
class Foo
{
  public:
    Foo(void):_explicitInit(1024){}
  private:
    int _explicitInit;  //在构造函数初始化列表中
                        //显式初始化的内置类型变量
    int _implicitInit;  //没有在构造函数中显式初始
                        //化的内置类型变量
};
Foo gF;  //全局范围内的类类型变量,_explicitInit被
         //显式初始化为1024,_implicitInit被自动初始
         //化为0
int main(int argc, char **argv)
{
  Foo f; //局部范围的类类型变量,_explicitInit被
         //显式初始化为1024,_implicitInit不会被
         //自动初始化,值随机
  return EXIT_SUCCESS;
}


 原文链接:https://blog.csdn.net/jzwong/article/details/45022591

相关推荐

  1. C++不同变量(/ 类型) 初始化规则

    2024-04-12 18:26:05       42 阅读
  2. JDK 基本注解类型

    2024-04-12 18:26:05       25 阅读
  3. C#面:ASP.NET常见对象

    2024-04-12 18:26:05       48 阅读
  4. C++ 变量声明和初始化方式

    2024-04-12 18:26:05       31 阅读
  5. c++2种返回变量类型名称方法

    2024-04-12 18:26:05       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 18:26:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 18:26:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 18:26:05       82 阅读
  4. Python语言-面向对象

    2024-04-12 18:26:05       91 阅读

热门阅读

  1. @NotEmpty、@NotBlank、@NotNull三种注解的区别

    2024-04-12 18:26:05       42 阅读
  2. 类 对象 对象实例

    2024-04-12 18:26:05       39 阅读
  3. vue中watch监听路由传来的参数变化问题

    2024-04-12 18:26:05       42 阅读
  4. Windows下如何确定虚函数在虚函数表中的位置

    2024-04-12 18:26:05       39 阅读
  5. MYSQL执行流程

    2024-04-12 18:26:05       41 阅读
  6. Fiddler:网络调试利器

    2024-04-12 18:26:05       40 阅读
  7. 从零学算法274

    2024-04-12 18:26:05       34 阅读
  8. 【python处理数据的函数】---误区2

    2024-04-12 18:26:05       33 阅读
  9. LeetCode 每日一题 ---- 【2923. 找到冠军 I】

    2024-04-12 18:26:05       38 阅读
  10. linux总结

    2024-04-12 18:26:05       37 阅读