c++ 初始化问题

一 、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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值