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

Wesley13
• 阅读 768

对于全局的变量

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

(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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java常用类(2)
三、时间处理相关类Date类:计算机世界把1970年1月1号定为基准时间,每个度量单位是毫秒(1秒的千分之一),用long类型的变量表示时间。Date分配Date对象并初始化对象,以表示自从标准基准时间(称为“历元”(epoch),即1970年1月1日08:00:00GMT)以来的指定毫秒数。示例:packagecn.tanjian
Wesley13 Wesley13
3年前
java成员变量的初始化
类变量(static变量,不需要实例化对象也可以引用)实例变量(非static变量,需要实例化对象)局部变量(类的成员函数中的变量)初始化方式:构造函数初始化变量声明时初始化代码块初始化java自动初始化(在构造函数执行之前执行) java保证所有变量被使用之前都是经过初始化的(声明并且定义过,被赋值
待兔 待兔
4年前
[Dart]Dart语言之旅<二>:变量
变量以下是创建变量并为其分配值的示例:varname'Bob';变量是引用。名为name的变量包含对值为“Bob”的String类型的对象的引用。默认值未初始化的变量的初始值为null。即使是数字类型的变量,初始值也为null,因为数字也是对象。intlineCount;assert(lineCountnull)
Wesley13 Wesley13
3年前
IOS全局变量
IOS中的全局变量和JAVA中的全局变量定义和使用方法不一样,在Java中,只需要将变量定义为static就行了。而在IOS中这种方法不适合。IOS中定义全局变量有三种方法:1.使用extern关键字在AppDelegate.m或AppDelegate.h中写入你需要的全局变量名,例如:int name;注意定义全局变量时候不能初始化,否则报错
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Wesley13 Wesley13
3年前
Java 初始化执行顺序以及成员变量初始化顺序
一、静态变量初始化顺序大家先看两个例子:(1)!(https://oscimg.oschina.net/oscnet/66be9168f7cdf36484b71f1d67069f12492.jpg)!(https://oscimg.oschina.net/oscnet/bf5d0b172f00f9aa237b3aee5b58cad5d0