C++变量/常量初始化表达式规则存疑:赋值表达式为何可使用?
变量初始值与赋值表达式的疑问解答
你碰到的矛盾核心是这篇文章的表述存在局限性或错误,和C++的实际语法规则不符:
首先明确:C完全允许用赋值表达式作为变量的初始值,你写的
int z = y = x;是合法语法。这里y = x是一个赋值表达式,它会返回y的引用,最终z会被初始化为x的值(也就是2),完全符合C标准。关于文章的错误表述,可能的原因有这几种:
- 文章可能针对的是其他编程语言,而非C++——有些语言确实禁止这种写法,但C++不在此列。
- 作者可能混淆了「赋值语句」和「赋值表达式」:赋值语句是独立的语句(比如单独一行
y = x;),不能放在初始化位置;但赋值表达式是有返回值的表达式,完全可以作为右值用于初始化。 - 文章提到的逗号运算符也同理:C++中逗号表达式可以用作初始值(比如
int a = (3, 5);,a会被初始化为5),只要注意逗号运算符的优先级较低,必要时加括号即可。
简言之,这篇文章的表述不适用于C++,在C++里,赋值表达式和逗号表达式都可以作为变量或常量的初始值。
内容的提问来源于stack exchange,提问作者mn_op
相关产品推荐
相关产品推荐

