C/C++里反直觉并且容易导致错误的逗号操作符

在整数a、b已经被定义的前提下,a = (b++,a*2)是合法的C++代码,其中的逗号是一个操作符。在作者看来,C++中的逗号操作符是一项非常反直觉并且容易导致错误的语法特性,建议读者非必要不使用。

本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者"海洋饼干叔
叔";本文不允许以纸质及电子出版为目的进行抄摘或改编。
1.《Python编程基础及应用》,陈波,刘慧君,高等教育出版社。免费授课视频 Python编程基础及应用
2.《Python编程基础及应用实验教程》, 陈波,熊心志,张全和,刘慧君,赵恒军,高等教育出版社Python编程基础及应用实验教程
3. 《简明C及C++语言教程》,陈波,待出版书稿。免费授课视频

一个逗号操作符的语法形式通常表现为:

expr1, expr2

这是一个表达式,以中间的逗号为分隔,左边为子表达式1,右边为子表达式2。当逗号操作符被应用时,C/C++会分别评估/计算子表达式expr1和expr2的值,然后再将expr2的值作为整个表达式的值。

a = (3+1,2);

在上述代码中,(3+1,2)是一个用括号括起来的包含逗号操作符的表达式。其中,3+1是左表达式,2是右表达式,最终,右表达式的值2会作为整个表达式的值被赋值给变量a。

我们通过下述示例进一步解释:

//Project - CommaOperator
#include <iostream>
using namespace std;

int main() {
    int a = 3, b=7;
    a = (b++,a*2);
    cout << "a = " << a << ", b = " << b;
    return 0;
}

上述代码的执行结果为:

a = 6, b = 8

第7行:(b++,a2)为一个用括号括起来的包含逗号操作符的表达式,其左表达式b++被计算/评估,b值从7变为8;其右表达式a\2也被计算/评估,由于a值为3,所以右表达式a*2的值为6,右表达式的值6最终被作为整个表达式的值赋值给变量a,变量a得值6。

🎯注意由于括号的参与,表达式“b++,a*2”先被计算,得到表达式结果后,再将表达式的值赋值给a。

从执行结果容易看出,a为6,b为8,与前述分析相符。

为了帮助更多的年轻朋友们学好编程,作者在B站上开了两门免费的网课,一门零基础讲Python,一门零基础C和C++一起学,拿走不谢!

简洁的C及C++
由编程界擅长教书,教书界特能编程的海洋饼干叔叔打造
Python编程基础及应用
由编程界擅长教书,教书界特能编程的海洋饼干叔叔打造

如果你觉得纸质书看起来更顺手,目前Python有两本,C和C++在出版过程中。

Python编程基础及应用

Python编程基础及应用实验教程
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值