手机
当前位置:查字典教程网 >编程开发 >C语言 >详解C++中变量的初始化规则
详解C++中变量的初始化规则
摘要:前言定义没有初始化式的变量时,系统有时候会帮我们初始化变量。系统如何初始化取决于变量的类型以及变量定义的位置。内置类型变量是否自动初始化取决...

前言

定义没有初始化式的变量时,系统有时候会帮我们初始化变量。

系统如何初始化取决于变量的类型以及变量定义的位置。

内置类型变量是否自动初始化取决于变量定义的位置。

函数体外定义的变量初始成0;函数体内定义的变量不进行自动初始化。除了用作赋值操作的左操作数,其他任何使用未初始化变量的行为都是未定义的,不要依赖未定义行为。

以int类型为例,一段简单的测试代码:

#include <iostream> using namespace std; int a; int main() { int b; cout << a << endl; cout << b << endl; return 0; }

在VS执行这段代码,输出变量a的值0,同时VS会报错:Run-Time Check Failure #3 — The variable 'b' is being used without being initialized。 变量a被自动初始化为0;变量b未被自动初始化。

类类型变量在定义时,如果没有提供初始化式,则会自动调用默认构造函数进行初始化(不论变量在哪里定义)。如果某类型没有默认构造函数,则定义该类型对象时必须提供显示初始化式。

一段简单的测试代码(默认构造函数由编译器自动生成):

#include <iostream> using namespace std; class testA { public: void printf() const { cout << data << endl; } private: int data; }; testA a; int main() { testA b; a.printf(); b.printf(); return 0; }

在VS执行这段代码,得到以下结果:

详解C++中变量的初始化规则1

编译器自动生成的默认构造函数使用与变量初始化相同的规则来初始化数据成员。对象a在函数体外定义,其int类型数据成员被初始为0;对象b在函数体内定义,合成默认构造函数不会对其进行初始化(符合内置类型变量初始化规则),其中存放的都是随机值。同样,如果数据成员是类类型,则会调用相应的默认构造函数对数据成员进行初始化。

如果稍微改变一下这个类的定义,定义一个构造函数以阻止编译器自动生成默认构造函数:

#include <iostream> using namespace std; class testA { public: testA(int a) { data = a; } void printf() const { cout << data << endl; } private: int data; }; testA a; int main() { testA b; a.printf(); b.printf(); return 0; }

这段代码无法通过编译:error C2512: “testA”: 没有合适的默认构造函数可用。

总结

以上就是关于C++中变量的初始化规则的全部内容,希望这篇文章的内容对大家学习使用C++能有所帮助,如果有疑问可以留言交流,谢谢大家对查字典教程网的支持。

【详解C++中变量的初始化规则】相关文章:

深入分析C++中类的大小

c++ 构造函数的初始化列表

C++代码规范之命名规则

浅谈C语言中结构体的初始化

C++中栈结构建立与操作详细解析

C++中virtual继承的深入理解

c++基础语法:构造函数初始化列表

C++中抽象类和接口的区别介绍

深入解析C中的数值与真假

解析C++ 浮点数的格式化输出

精品推荐
分类导航