(七十)逗号运算符

逗号运算符实质上,就是把两个或者多个表达式放一起,会被编译器认为是一个表达式。

 

表达式 的定义:任何值或任何有效的值和运算符的组成是表达式。

 

以下不是表达式:

int a , b ; 其中a,b分别是一个变量,

我们可以int a; int b; 这样是声明a是int类型,b是int类型。

 

也可以int a, b; 这样是声明a和b都是int类型。

 

在这里有点类似 “和” 的意思。——但记住,不是每个都可以这么理解,特别是在输出 表达式的值 的时候

 

以下是表达式:

又例如在for循环语句里,小括号里面的三个语句,是被分号隔起来的。

for(i=1;i<5;i++)

其中i=1、i<5和i++都是表达式。

 

这三个表达式,也可以用逗号运算符。

上代码:

#include<iostream>

int main()
{
	using namespace std;
	int a, b;
	for (a = 1, b = 3;a < 2, b < 6;a++, b++)
	{
		cout << "第" << a << "遍循环" << endl;
		cout << a << endl;
		cout << b << endl;
	}
	cout << "循环已经结束" << endl;
	cout << a << endl;
	cout << b << endl;

	system("pause");
	return 0;
}

输出:

第1遍循环
1
3
第2遍循环
2
4
第3遍循环
3
5
循环已经结束
4
6
请按任意键继续. . .

问题:

①从结果来看,结束循环是因为b不小于6,而不是a<2。

即:逗号前的判断 未满足 并没有影响到判断,逗号后的判断 未满足 ,循环结束。即a<2并没有影响结果。

 

——这里有一种猜想,是不是因为两个表达式都不满足后,循环结束。至少满足一个表达式,循环继续进行。

 

然而,在测试中被否决,在另外一个for中,第一个表达式满足,第二个表达式不满足,循环结束。——即只有一个表达式不满足,但循环依然结束。

 

另外,在之前,我们分析到for语句的判断语句,是将表达式转为bool类型,满足值为1,不满足值为0,当值为0时结束判断语句。

最后发现:

第一个表达式是否满足,并不影响循环执行;

若第二个表达式的值为false,则循环停止。

 

②因此,逗号运算符,在for循环判断语句的时候,不能理解为“和”,这就涉及到,由逗号运算符连接多个表达式一起的话,这个表达式的值为什么。

见下一部分。

 

 

逗号前后多个表达式的值(表达式的值):

假如逗号将两个表达式连接在一起,如a<3,b<4;

那么这个表达式的值为多少?

上代码:

#include<iostream>

int main()
{
	using namespace std;
	int a = 1, b = 5, c;
	cout.setf(ios_base::boolalpha);
	cout << "(a < 4, b>6) = " << (a < 4, b>6) << endl;	//逗号前a<4是true,逗号后b>6是flase
	cout << "(a = 3, b = 9) = " << (a = 3, b = 9) << endl;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "(a = 3, b = 9 , c=5 ) = " << (a = 3, b = 9, c = 5) << endl;
	system("pause");
	return 0;
}

输出:

(a < 4, b>6) = false
(a = 3, b = 9) = 9
a = 3
b = 9
(a = 3, b = 9 , c=5 ) = 5
请按任意键继续. . .

结论:

①有逗号参与的多个表达式,他们的值永远表现的是最后一个表达式的值。

 

②因此,在for循环语句的判断语句中,是否执行循环,判断的是最后一个表达式的值是true还是false。

 

③变量名=30 这种形式的表达式,值为30

 

时间: 2024-09-20 18:27:51

(七十)逗号运算符的相关文章

逗号运算符 (,)

运算   顺序执行两个表达式. expression1, expression2 参数 expression1 任何表达式. expression2 任何表达式. 说明 , 运算符使它两边的表达式以从左到右的顺序被执行,并获得右边表达式的值., 运算符最普通的用途是在 for 循环的递增表达式中使用.例如: for (i = 0; i < 10; i++, j++){   k = i + j;} 每次通过循环的末端时, for 语句只允许单个表达式被执行., 运算符被用来允许多个表达式被当作单个

JavaScript中逗号运算符介绍及使用示例

 这篇文章主要介绍了JavaScript中逗号运算符介绍及使用示例,本文讲解了逗号运算符的定义.使用例子及实际使用的一些技巧,需要的朋友可以参考下     有一道js面试题,题目是这样的:下列代码的执行结果是什么,为什么? 代码如下: var i, j, k; for (i=0, j=0; i<10, j<6; i++, j++) { k = i+j; } document.write(k);   答案是显示10,这道题主要考察JavaScript的逗号运算符. 下面是MDN对逗号运算符的定义

DockOne微信分享(七十九):基于容器技术构建企业级PaaS云平台实践

本文讲的是DockOne微信分享(七十九):基于容器技术构建企业级PaaS云平台实践[编者的话]企业级容器化PaaS平台旨在为企业应用提供底层支撑能力,覆盖应用开发.应用交付.上线运维等环节,包括代码的管理.持续集成.自动化测试.交付物管理.应用托管.中间件服务.自动化运维.监控报警.日志处理等,本次分享主要介绍基于容器技术构建PaaS平台所采用的相关技术.涉及的核心功能模块以及相关方案. 为满足以上需求,MoPaaS企业版基于Cloud Foundry及Kubernetes等开源技术框架和智能

(七十四)类型别名、别名的建立

例如: clock_t one_start; 实质上就是建立了一个int类型的变量one_start,虽然在变量名前面写的是clock_t,但他实质上是int类型的别名.     建立别名的方法: ①使用预处理器: #define 别名 原名; 如: #define abc double 在编译器进行处理的时候,将abc转为double进行处理. 代码: #include<iostream> #define abc double //将abc认为是double进行处理 int main() {

DockOne微信分享(七十五):应用容器化之Kubernetes实践

本文讲的是DockOne微信分享(七十五):应用容器化之Kubernetes实践[编者的话]本次分享主要以ZooKeeper.Redis.Kafka.MongoDB等应用容器化在Kubernetes平台上面实践.从计算.网络.存储方面解析应用在集成中的问题,以及部分传统应用在容器化过程中设计的应用二次开发等问题.首先介绍应用Docker化的需求和局限.接着介绍基础平台,整体环境包括Kubernetes和ECP,然后介绍具体应用如ZooKeeper在集成中的实践,最后介绍部分开源应用在容器化过程中

DockOne微信分享(七十八):中英人寿保险有限公司基于容器技术的实践分享

本文讲的是DockOne微信分享(七十八):中英人寿保险有限公司基于容器技术的实践分享[编者的话] 中英人寿在移动应用开发与运维上引入DevOps,极大的提升了开发效率,进而实现持续交付能力.持续交付让移动应用上线的速度从以月为单位提升到周甚至到天. 通过在企业云上使用(Docker.Git.Jenkins etc)搭建自动化部署流水线, 使软件的构建.测试.部署的过程自动化实现.随着IT架构向云架构的转型,在架构级管理工具上采用虚拟化容器管理,实现从IaaS到PaaS的转变.对移动应用系统进行

DockOne微信分享(七十六):容器化ICT融合初体验

本文讲的是DockOne微信分享(七十六):容器化ICT融合初体验[编者的话]本次将分享的容器化ICT融合平台是一种面向未来ICT系统的新型云计算PaaS平台,它基于容器这一轻量级的虚拟化技术以及自动化的"微服务"管理架构,能够有效支撑应用快速上线和自动扩缩容,最大化IT基础设施资源利用率并降低总体拥有成本(TCO).未来的网络正在向IT化.云化方向发展,容器与微服务技术,完美契合"网络即服务".网络切片等发展理念,将有助于实现更加灵活.智能.高效和开放的5G新型网

DockOne微信分享(七十):浅谈Docker安全合规建设

本文讲的是DockOne微信分享(七十):浅谈Docker安全合规建设[编者的话]通过阅读网上帖子及浏览相关信息,大家可能会产生一种错觉:Docker安全性不足,对Docker导入生产环境持保守态度.不过实际情况是,虽然我们需要对容器的安全性高度关注,但只要使用得当,完全可以成为一种不低于使用虚拟机或者裸机的安全.高效生产系统. 今天和大家聊聊Docker的安全合规建设. 安全,这里我们指的是信息安全,包括数据安全和网络安全,主要是数据在处理.传输.存储等过程中的安全,它包括了信息本身的安全和防

翡翠城虚假宣传,五十年产权宣传称七十年

青岛莱西翡翠城小区(资料片)环球网青岛频道9月5日讯(见习记者 周南均 记者 王晓飞) "莱西翡翠城看房子的时候,销售人员声称房屋产权是七十年,可实际产权只有五十年!"近日,青岛莱西的曲女士向环球网青岛频道热线(0532-66568111)反映称,她在签订莱西翡翠城的购房合同时,发现实际的房屋产权只有五十年,曲女士认为翡翠城虚假宣传.对此,律师表示,若业主反映情况属实,翡翠城属虚假宣传,业主有权要求开发商退房.爆料:五十年产权宣传称七十年 翡翠城虚假宣传青岛莱西的曲女士向环球网青岛频道