C/C++ 初始化几种方式

一 默认初始化


int *pi = new int; //默认初始化,不对 基本内置类型进行初始化所以pi指向一个未初始化的int

string *ps=new string; //默认初始化为空string


默认初始化规则:

1 内置类型,如果未被显示初始化,由值由定义位置决定。 

1)定义在任何函数之外的变量被初始化为0 

2) 定义在函数内部的内置类型变量不会被初始化

2 类类型,各自决定其初始化对象的方式

函数外部(全局变量),函数内部,都会调用类的构造函数进行初始化


二 直接初始化方式(可以使用传统的花括号(),或c++11引入的{},即使用列表初始化

string s("123") //直接初始化

string s = "123"//拷贝初始化。 编译器把等号右侧的初始值拷贝到新创建对象中。


string s8= string('c',8) //拷贝初始化

等价于

string temp = string('c',8)

string s8 = temp

等价于

string s8('c',8) //直接初始化


三 值初始化(只需在类型名后面跟一对空括号() 即可)

string *ps= new string(); //值初始化为空串

string *ps2 = new string;//直接初始化为空串

int *pi1 = new int();//值初始化为0

int *pi2= new int; //值初始化为 ‘未定义'

1 内置类型 初始化为0

2 类类型,调用构造函数


一段代码 g++/vs 2010对比运行结果

#include <iostream>
#include <vector>


using namespace std;


int main()
{
        int i;
        int *pi = new int;


        int *pi2 = new int();
        int *pi3 = new int(1);




        cout<<" *pi:"<<*pi<<"i:"<<i<<"*pi2:"<<*pi2<<"*pi3:"<<*pi3<<endl;


}


g++编译器:

root@ubuntu:~/c11# ./a.out     
 *pi:0i:-1074971288*pi2:0*pi3:1

vs2010编译器:

可以检查出 i未初始化局部变量,编译报警告,运行时也遇到错误。 修改i=3之后,*pi依然是未定义的值


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值