c++ 初始化问题

来源:互联网 发布:如何在淘宝外卖开店 编辑:程序博客网 时间:2024/06/01 20:51

一 、c++ 几种初始化方式:

什么是初始化?

在创建变量时,给变量一个初始的值。

什么是赋值?

把变量当前的值擦除,赋予一个新的值。


1. 默认初始化

在定义变量时,没有指定这个变量的初始值,此时变量被默认初始化。变量被默认初始化的值是什么呢?

这取决与变量定义的位置和变量的类型。

(a) 对于在任何函数之外(包括main函数)的内置类型变量(整数、浮点数、单个字符和布尔值),默认初始化值0。

(b)对于在函数体之内的内置类型变量,不会进行默认初始化。未初始化的值有一个未知的值,这是因为为变量分配的存储空间里面之前存储的值并没有被清空。若直接引用或运算将引发不可预知的错误。而此错误编译器可能无法检测,而导致程序以错误的方式运行。如下:

int main() {    int result;    for (int i = 0; i <= 10; i++ )        result += i ;    cout << "result = " << result << endl;    return 0;}

运行结果:

result = 4201074

所以最好的方式就是对于函数体内的内置类型一定要显示初始化。

(b) 对于类类型,类自己决定是否提供默认初始化,若提供默认初始化,类自己决定默认值。


2、拷贝初始化

直接使用等号或圆括号初始化。

int i = 0
int result(0);

3、列表初始化

在c++11的标准中可采用列表初始化。

int m = {0};int h{0};

二、vector类型的初始化问题

1、vector是标准库中的一种标准库模板。vector的初始化方式有下面几种:

int n = 10, val = 7;/*一个空的vector,元素类型是int*/ vector <int> v1;/*v2v3中包含v2中所有元素的值*/ vector <int> v2 = v1; vector <int> v3(v1);/*包含n个元素,每个元素的值为val*/ vector <int> v4(n, val);/*n个元素的值都是初始化的值*/ vector <int> v5(n);/*每个元素被赋予相应的初始值,表达等价*/ vector <int> v6 = {1,2,3,4}; vector <int> v7{1,2,3,4}; 

如果没有提供初始化的值,会根据vector的类型来进行默认初始化。int类型默认为0,string类型为空。

2、关于使用圆括号与花括号的区别:

v1有10个元素,每个为0。

vector <int> v1(10);
v1只有一个元素,为10。

vector <int> v1{10};
v1有10个元素,每个为1。

vector <int> v1(10,1);
v1有两个元素,一个是10,一个是1。

vector <int> v1{10,1};

如果是圆括号,只有一个整数参数,则是指明vector的容量。有两个参数,第一个为整数,第二个为vector元素的类型,则指明存储了多少个重复的元素。

如果是花括号,则用花括号中的元素来初始vector元素。但是当花括号中的值不能用于初始化vetctor中的元素时,花括号的作用与圆括号一致。如下:

10不能初始化string类型的元素,所以此时表示的是v1中有10个元素,每个元素为空的string

vector <string> v1{10};
同样,下面表示的是v2中有10个“hi”元素。

vector <string> v2{10,"hi"};

0 0
原创粉丝点击