您的位置:首页 > 编程语言 > C语言/C++

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

2013-12-15 12:52 267 查看
一 默认初始化

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依然是未定义的值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: