对于全局的变量
如果内置类型的变量未被显示地初始化,它的值将由定义的位置决定。
(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:0int:0long:0long long:0float:0double:0long double:0bool:he llochar: wchar_t:he0lloprint 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结果(很可怕):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:-13108int:-858993460long:-858993460long long:-3689348814741910324float:-1.07374e+008double:-9.25596e+061long double:-9.25596e+061bool:he蘬lochar:wchar_t:he52428lloprint array:-858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460
通过构造函数初始化
#pragma once#includeusing 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:0int:0long:0long long:0float:0double:0long double:0bool:he llochar:wchar_t:he32lloprint array:0 0 0 0 0 0 0 0 0 0