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;/*用v2、v3中包含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"};
- objective-c初始化问题
- C程序初始化问题
- C++/C 数组初始化问题
- C语言数组初始化问题
- C语言中变量的初始化问题
- C语言中数组的初始化问题
- C/C++中字符指针初始化问题
- C程序中,变量的初始化问题
- C语言中的数组初始化问题
- C: 局部变量、全局变量初始化问题
- C++:类的定义及初始化问题
- C,java语言中初始化问题
- C语言中数组的初始化问题
- C语言初始化的基础问题
- 初始化问题
- 初始化问题
- 初始化问题
- C语言中变量没有初始化 所带来的问题
- 安卓中实现自定义对话框以及自定义显示位置
- 网络加载图片对比(Fresco/Glide)
- 滑动冲突研究之ScrollView+ListView
- 论文阅读ImageNet Classification with Deep Convolutional Neural Networks &Going Deeper with Convolutions
- 欢迎使用CSDN-markdown编辑器
- c++ 初始化问题
- Android APK 编译打包流程
- 洛谷OJ
- iOS经典讲解之网络编程 TCP/UDP HTTP
- bzoj 3916 暴力+hash
- python源码剖析 0-1章
- Java中的封装
- linux文件系统详解
- 安卓开发工具网址汇总