我注意到在很多时候,重构C和C++代码的不同部分,使用逗号而不是半冒号来分隔语句.像这样的;

int a = 0, b = 0;
a = 5, b = 5;

在我期待的地方

int a = 0, b = 0;
a = 5; b = 5;

我知道C和C++允许使用逗号分隔语句(特别是循环头),但是这两个代码之间有什么区别?我的猜测是,逗号被留在了cut&粘贴,但这是一个错误,它会影响执行吗?

推荐答案

这对你发布的代码没有影响.一般来说,逗号就像分号一样分隔表达式,但是,如果将整个表达式视为一个表达式,则逗号运算符意味着表达式的计算结果为最后一个参数.

下面是一个例子:

b = (3, 5);

将判断3,然后判断5,并将后者分配给b.So b = 5.请注意,括号在这里很重要:

b = 3, 5;

将计算b = 3,然后为5,整个表达式的结果为5,但仍为b == 3.

当迭代器代码不是简单的i++,但是需要执行多个命令时,逗号操作符在for循环中特别有用.在这种情况下,分号不能很好地与for循环语法配合使用.

C++相关问答推荐

如何用C(使用两个s补数算术的32位程序)计算

exit(EXIT_FAILURE):Tcl C API类似功能

如何将不同长度的位转换成字节数组?

如何使用Python C API实现多线程程序?

为什么C语言允许你使用var =(struct NAME){

将fget()与strcMP()一起使用不是正确的比较

ATmega328P EEPROM未写入

struct 上的OpenMP缩减

字符是否必须转换为无符号字符,然后才能与getc家族的返回值进行比较?

ifdef __cplusplus中的整数文字单引号

为什么未初始化的 struct 的数组从另一个数组获取值?

C代码可以在在线编译器上运行,但不能在Leetcode上运行

我应该在递归中使用全局变量吗

Fscanf打印除退出C代码为1的程序外的所有内容

向左移位3如何得到以字节为单位的位数?

浮动目标文件,数据段

在C中,为什么这个带有递增整数的main函数从不因溢出而崩溃?

使用 strtok 多次分割一个字符串会导致意外行为

使用 GCC 将一个函数中初始化的 struct 体实例通过指针传递到 C 中的另一个函数会产生不同的结果

在 C23 之前如何对空指针使用nullptr?