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

对于全局的变量

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

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

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

对于(1)举例如下:

1short sn; 2int in; 3long ln; 4long long lln; 5float f; 6double d; 7long double ld; 8bool b; 9char c; 10wchar_t wc; 11int nArr[10]; 12 13void PrintVariable() 14{ 15 cout << "short:" << sn << endl; 16 cout << "int:" << in << endl; 17 cout << "long:" << ln << endl; 18 cout << "long long:" << lln << endl; 19 cout << "float:" << f << endl; 20 cout << "double:" << d << endl; 21 cout << "long double:" << ld << endl; 22 cout << "bool:" << "he" << c << "llo" << endl; 23 cout << "char:" << c << endl; 24 cout << "wchar_t:" << "he" << wc << "llo" << endl; 25 cout << "print array:" << endl; 26 for (int i = 0; i < 10; i ++) 27 { 28 cout << nArr[i] << " "; 29 } 30 cout << endl; 31}

结果

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)举例如下:

1void PrintVariable() 2{ 3 short sn; 4 int in; 5 int nArr[10]; 6 7 int num = in; //未被初始化,不请允许拷贝:Run-Time Check Failure #3 - The variable 'in' is being used without being initialized. 8 cout << "short:" << sn << endl; //未被初始化,不允许访问该成员:Run-Time Check Failure #3 - The variable 'sn' is being used without being initialized. 9 cout << nArr[0] << in << endl; //未被初始化,不允许访问该成员:Run-Time Check Failure #3 - The variable 'in' is being used without being initialized. 10}

类内的成员变量

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

1.构造函数初始化

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

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

没有构造函数初始化:

1#pragma once 2 3#include <iostream> 4using namespace std; 5 6class TestData 7{ 8 9public: 10 //TestData(void); 11 ~TestData(void); 12 13 void PrintVariable() 14 { 15 cout << "short:" << sn << endl; 16 cout << "int:" << in << endl; 17 cout << "long:" << ln << endl; 18 cout << "long long:" << lln << endl; 19 cout << "float:" << f << endl; 20 cout << "double:" << d << endl; 21 cout << "long double:" << ld << endl; 22 cout << "bool:" << "he" << c << "llo" << endl; 23 cout << "char:" << c << endl; 24 cout << "wchar_t:" << "he" << wc << "llo" << endl; 25 cout << "print array:" << endl; 26 for (int i = 0; i < 10; i ++) 27 { 28 cout << nArr[i] << " "; 29 } 30 cout << endl; 31 } 32private: 33 short sn; 34 int in; 35 long ln; 36 long long lln; 37 float f; 38 double d; 39 long double ld; 40 bool b; 41 char c; 42 wchar_t wc; 43 int nArr[10]; 44 45};

结果(很可怕):

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

通过构造函数初始化

1#pragma once 2 3#include <iostream> 4using namespace std; 5 6class TestData 7{ 8 9public: 10 TestData(void) : sn(0), in(0), ln(0), lln(0), f(0), d(0.0), ld(0), b(true), c(' '), wc(L' ') 11 { 12 memset(nArr, 0, 10*sizeof(int)); 13 } 14 15 ~TestData(void); 16 17 void PrintVariable() 18 { 19 cout << "short:" << sn << endl; 20 cout << "int:" << in << endl; 21 cout << "long:" << ln << endl; 22 cout << "long long:" << lln << endl; 23 cout << "float:" << f << endl; 24 cout << "double:" << d << endl; 25 cout << "long double:" << ld << endl; 26 cout << "bool:" << "he" << c << "llo" << endl; 27 cout << "char:" << c << endl; 28 cout << "wchar_t:" << "he" << wc << "llo" << endl; 29 cout << "print array:" << endl; 30 for (int i = 0; i < 10; i ++) 31 { 32 cout << nArr[i] << " "; 33 } 34 cout << endl; 35 } 36private: 37 short sn; 38 int in; 39 long ln; 40 long long lln; 41 float f; 42 double d; 43 long double ld; 44 bool b; 45 char c; 46 wchar_t wc; 47 int nArr[10]; 48 49};

结果:

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java常用类(2)

三、时间处理相关类Date类:计算机世界把1970年1月1号定为基准时间,每个度量单位是毫秒(1秒的千分之一),用long类型的变量表示时间。Date分配Date对象并初始化对象,以表示自从标准基准时间(称为“历元”(epoch),即1970年1月1日08:00:00GMT)以来的指定毫秒数。示例:packagecn.tanjian

java成员变量的初始化

类变量(static变量,不需要实例化对象也可以引用)实例变量(非static变量,需要实例化对象)局部变量(类的成员函数中的变量)初始化方式:构造函数初始化变量声明时初始化代码块初始化java自动初始化(在构造函数执行之前执行) java保证所有变量被使用之前都是经过初始化的(声明并且定义过,被赋值

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