【C++】2.2.1 变量定义

news/2025/3/5 12:26:38/

目录

1.变量定义的基本形式

2.初始化

3.列表初始化

4.默认初始化


1.变量定义的基本形式

类型说明符(type specifier)+ 一个或多个变量名组成的列表

其中变量名以 逗号 分隔,最后用分号结束。

还可以在定义时对变量赋初始值。

比如:

int i;
char m,n,k;
double dVar1 = 0, dVar2, dVar3 = 1;
int iVar(10);

2.初始化

当对象在创建时获得了一个特定的值,就是初始化

初始化不是赋值,初始化是变量创建时赋予其一个初始值,而赋值是把对象当前的值抹去,替换一个新的值。

C++定义了多种初始化的形式,以下语句都可以实现初始化:

int iVar = 0;
int iVar = {0};
int iVar{0};
int iVar(0);

一般而言,选择什么的初始化方式都不会太影响程序的正常运行。其中,使用 = 初始化一个变量,实际上执行的是拷贝初始化(copy initialization),编译器将等号右边的初始值拷贝到创建的对象中去。如果不使用等号,就是执行的直接初始化(direct initialization)。

注意:

当初始值只有一个时,使用直接初始化或者拷贝初始化都可以。但是如果初始化的值有多个,一般来说就只能使用直接初始化的方式。

比如:

string s(100,'a');//直接初始化//如果使用拷贝初始化:
string s = string(100,'a');
//以上代码等价于
string stemp(100.'a');
string s = stemp;

如果提供的是元素 初始值的列表,则只能把初始值都放在花括号里进行列表初始化,而不能放在圆括号里。

vector<int> vctVar{1,2,3} //正确
vector<int> vctVar(1,2,3) //错误

但是利用花括号进行初始化和默认初始化有几个需要注意的问题。

3.列表初始化

利用花括号进行初始化就是列表初始化。

当我们使用内置类型的变量时,如果初始值和变量类型不一致,且存在数据丢失的风险时,编译器将报错。

long double ldVar = 3.1415926;
int iVar{ldVar}; //错误,long double类型初始化int类型变量可能丢失数据

4.默认初始化

如果定义变量时没有指定初始值,变量就会默认初始化。

对于内置类型的变量,定义在函数体外部的变量默认初始化的值为0;而定义在函数体内部的内置类型变量将 不被初始化。函数内部一个未被初始化的内置类型变量被拷贝或者访问时会引发错误。

类的对象如果没有被显式初始化,则其值由类确定。


http://www.ppmy.cn/news/1576813.html

相关文章

EasyTwin UI2,给好锅配一个好盖

都说好锅得配好盖&#xff0c;同样&#xff0c;在数字孪生技术领域&#xff0c;一款优秀的仿真渲染引擎也需要一个完美的“盖子”来提升其表现力和用户体验。EasyTwin&#xff08;易知微旗下的数字孪生仿真渲染引擎&#xff09;这次终于等来了它的最佳搭档&#xff01;全新升级…

年后寒假总结及计划安排

年后寒假总结 年后主要学习了微服务&#xff0c;nacos (服务注册中心)&#xff0c;feign&#xff08;远程调用&#xff09;&#xff0c;网关&#xff0c;双token&#xff08;相较于之前更加规范&#xff0c;更加符合企业级&#xff09;&#xff0c;配置管理 &#xff0c;mybati…

MySQL索引的最左前缀匹配原则是什么?

目录 概念&#xff1a; 核心规则&#xff1a; 底层原理&#xff1a; 底层原因&#xff1a; 概念&#xff1a; 最左前缀匹配原则是复合索引&#xff08;由多个列组成的索引&#xff09;的核心使用规则&#xff0c;指查询必须从索引的最左列开始&#xff0c;并且不能跳过中间…

linux server docker 拉取镜像速度太慢或者超时的问题处理记录

已经按网上的帖子将镜像地址改为国内的了,用docker info命令查看,如下图所示: 但是还存在下载镜像特别卡的问题,而不是直接报错了,如下图所示: 甚至已经连续下载一晚上了,还是卡在这里,不见任何下载进展。 我在window的docker中下载了对应的镜像,并用以下语句生成了…

GPT-4.5实际性能评测:实际探索

摘要 经过数万轮严格测试&#xff0c;GPT-4.5的性能并未超越其前代产品GPT-4。此前发布的《GPT-4.5 一手实测&#xff1a;垃圾》一文中存在不准确描述&#xff0c;在此向读者致歉。尽管GPT-4.5在价格上有所提升且响应速度较慢&#xff0c;但测试结果显示其模型素质并未达到预期…

秒杀系统的常用架构是什么?怎么设计?

架构 秒杀系统需要单独部署&#xff0c;如果说放在订单服务里面&#xff0c;秒杀的系统压力太大了就会影响正常的用户下单。 常用架构&#xff1a; Redis 数据倾斜问题 第一步扣减库存时 假设现在有 10 个商品需要秒杀&#xff0c;正常情况下&#xff0c;这 10 个商品应该均…

FFmpeg-chapter3和chapter4-读取视频流(原理篇和实战篇)

ffmpeg网站&#xff1a;About FFmpeg 1 库介绍 &#xff08;1&#xff09;libavutil是一个包含简化编程函数的库&#xff0c;包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。 &#xff08;2&#xff09;libavcodec是一个包含音频/视频编解码器的解码器和编…

Linux驱动开发-字符设备驱动开发

Linux驱动开发-字符设备驱动开发 一&#xff0c;Linux驱动开发二&#xff0c;字符设备驱动开发1.具体实现2.1.1驱动模块具体函数实现2.1.2 应用调试模块具体函数实现2.1.3 Makefile2.1.4 进行测试2.1.4.1创建节点2.1.4.2 加载和卸载驱动模块2.1.4.3 测试 2.字符设备驱动应用程序…