文档章节

C++中内置变量的初始化

自由的角马
 自由的角马
发布于 2015/01/10 13:57
字数 750
阅读 16
收藏 0

对于全局的变量

如果内置类型的变量未被显示地初始化,它的值将由定义的位置决定。

(1).定义在函数体之外的变量将被初始化为0

(2).定义在函数体内部的变量将不被初始化,它的值将是任意的。

 

对于(1)举例如下:

short sn;
int in;
long ln;
long long lln;
float f;
double d;
long double ld;
bool b;
char c;
wchar_t wc;
int nArr[10];

void PrintVariable() 
{
	cout << "short:" << sn << endl;
	cout << "int:" << in << endl;
	cout << "long:" << ln << endl;
	cout << "long long:" << lln << endl;
	cout << "float:" << f << endl;
	cout << "double:" << d << endl;
	cout << "long double:" << ld << endl;
	cout << "bool:" << "he" << c << "llo" << endl;
	cout << "char:" << c << endl;
	cout << "wchar_t:" << "he" << wc << "llo" << endl;
	cout << "print array:" << endl;
	for (int i = 0; i < 10; i ++)
	{
		cout << nArr[i] << "    ";
	}
	cout << endl;
}

结果

short:0
int:0
long:0
long long:0
float:0
double:0
long double:0
bool:he llo
char: 
wchar_t:he0llo
print array:
0    0    0    0    0    0    0    0    0    0 


对于(1)举例如下:

void PrintVariable() 
{
	short sn;
	int in;
	int nArr[10];

	int num = in;					//未被初始化,不请允许拷贝:Run-Time Check Failure #3 - The variable 'in' is being used without being initialized.
	cout << "short:" << sn << endl;			//未被初始化,不允许访问该成员:Run-Time Check Failure #3 - The variable 'sn' is being used without being initialized.
	cout << nArr[0] << in << endl;			//未被初始化,不允许访问该成员:Run-Time Check Failure #3 - The variable 'in' is being used without being initialized.
}




 

类内的成员变量

如果是在类中定义的类成员,则初始化的顺序为:

1.构造函数初始化

2.如果没有构造函数,则通过类内的初始值进行初始化(可能有些较老的版本不允许有类内初始值)

3.默认初始化(值将是未定义的,是任意的)


没有构造函数初始化:

#pragma once

#include <iostream>
using namespace std;

class TestData
{

public:
	//TestData(void);
	~TestData(void);

	void PrintVariable() 
	{
		cout << "short:" << sn << endl;
		cout << "int:" << in << endl;
		cout << "long:" << ln << endl;
		cout << "long long:" << lln << endl;
		cout << "float:" << f << endl;
		cout << "double:" << d << endl;
		cout << "long double:" << ld << endl;
		cout << "bool:" << "he" << c << "llo" << endl;
		cout << "char:" << c << endl;
		cout << "wchar_t:" << "he" << wc << "llo" << endl;
		cout << "print array:" << endl;
		for (int i = 0; i < 10; i ++)
		{
			cout << nArr[i] << "    ";
		}
		cout << endl;
	}
private:
	short sn;
	int in;
	long ln;
	long long lln;
	float f;
	double d;
	long double ld;
	bool b;
	char c;
	wchar_t wc;
	int nArr[10];

};

结果(很可怕):

short:-13108
int:-858993460
long:-858993460
long long:-3689348814741910324
float:-1.07374e+008
double:-9.25596e+061
long double:-9.25596e+061
bool:he蘬lo
char:
wchar_t:he52428llo
print array:
-858993460    -858993460    -858993460    -858993460    -858993460    -858993460
    -858993460    -858993460    -858993460    -858993460


通过构造函数初始化

#pragma once

#include <iostream>
using namespace std;

class TestData
{

public:
	TestData(void) : sn(0), in(0), ln(0), lln(0), f(0), d(0.0), ld(0), b(true), c(' '), wc(L' ')
	{
		memset(nArr, 0, 10*sizeof(int));
	}

	~TestData(void);

	void PrintVariable() 
	{
		cout << "short:" << sn << endl;
		cout << "int:" << in << endl;
		cout << "long:" << ln << endl;
		cout << "long long:" << lln << endl;
		cout << "float:" << f << endl;
		cout << "double:" << d << endl;
		cout << "long double:" << ld << endl;
		cout << "bool:" << "he" << c << "llo" << endl;
		cout << "char:" << c << endl;
		cout << "wchar_t:" << "he" << wc << "llo" << endl;
		cout << "print array:" << endl;
		for (int i = 0; i < 10; i ++)
		{
			cout << nArr[i] << "    ";
		}
		cout << endl;
	}
private:
	short sn;
	int in;
	long ln;
	long long lln;
	float f;
	double d;
	long double ld;
	bool b;
	char c;
	wchar_t wc;
	int nArr[10];

};


结果:

short:0
int:0
long:0
long long:0
float:0
double:0
long double:0
bool:he llo
char:
wchar_t:he32llo
print array:
0    0    0    0    0    0    0    0    0    0


本文转载自:http://blog.csdn.net/luoweifu/article/details/39781399

自由的角马
粉丝 1
博文 269
码字总数 0
作品 0
文山
私信 提问
C++ primer第二次阅读学习笔记(第1、2章)

C++ primer第二次阅读学习笔记(第1、2章) 一年前开始了C++primer的第一遍阅读,一年之后重新拾起C++primer。原因有二,一:第一遍阅读时刚开始接触C++,对C++认识有限,学习C++primer不可能...

长平狐
2012/10/08
107
0
[C++再学习系列] 全局或静态变量(对象)的初始化

  对于C语言的全局和静态变量,不管是否被初始化,其内存空间都是全局的;如果初始化,那么初始化发生在任何代码执行之前,属于编译期初始化。由于内置变量无须资源释放操作,仅需要回收内...

技术小美
2017/11/05
0
0
C++ 逐渐 Python 化

近几年C++有了很多变化。最新的两个版本C++11和C++14,引入了如此多的新特性,用 Bjarne Stroustrup的话说就是“感觉就像一个新语言一样。” 真的。现代c++形成了一个全新的编程风格,我不能...

fsxchen
2014/12/09
28.5K
57
const在c和c++中的区别

C中的const,功能比较单一,较容易理解: 作用: 被修饰的内容不可更改。 使用场合:修饰变量,函数参数,返回值等。(C++中应用场合要丰富的多) 特点: 是运行时const,因此不能取代#defi...

雅各宾
2013/07/11
83
2
Effective C++笔记简易总结以及程序演示

4、确定对象被使用前已被初始化 在使用变量时不进行初始化是不好的行为,在程序中有可能读入一个未初始化的值就可能导致程序崩溃。 对于内置类型,保证在使用对象之前进行初始化: 对于结构体...

oldpan
2017/10/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部