关于C++代码const char* a = (10, "What");的语法合法性及含义疑问
嘿,这问题问得好!让我一步步给你把这段代码的来龙去脉说清楚~
问题1:这是什么代码?
这是一段利用C里**逗号运算符(comma operator)**编写的代码,看起来有点“非主流”,但完全符合C的语法规范。
问题2:C++为什么允许这样的代码?具体含义是什么?
首先得搞懂逗号运算符的核心作用:
- 它会按从左到右的顺序依次计算逗号分隔的每一个表达式
- 前面所有表达式的计算结果都会被直接丢弃,只把最后一个表达式的结果作为整个逗号表达式的最终返回值
回到你的代码示例:
const char* a = (10, "What");
这段代码的执行逻辑是这样的:
- 先计算括号里的第一个表达式
10——这就是个普通的数值,计算完之后没有任何实际作用,直接被丢弃掉 - 接着计算第二个表达式
"What"——这是一个C风格字符串字面量,它在内存中是一个字符数组,而它本身代表的是指向该数组首字符的指针 - 整个逗号表达式最终返回的就是
"What"的指针值,然后把这个值赋值给变量a
说白了,这段代码和下面的写法完全等价:
const char* a = "What";
前面的10纯粹是用来演示逗号运算符特性的“冗余代码”,没有实际业务意义。
C++允许这种写法,是因为逗号运算符在某些场景下确实能发挥作用——比如在for循环里同时更新多个变量,或者在一行里快速完成多个简单操作(不过日常开发里一般不这么写,会让代码可读性变差)。
内容的提问来源于stack exchange,提问作者Eduard Xue
相关产品推荐
相关产品推荐

