=优先于,1.所以第一个声明是声明和初始化i:
int i = 1;
Run Code Online (Sandbox Code Playgroud)
...后面跟着很多逗号分隔的表达式,什么都不做.
另一方面,第二个代码由一个声明后跟一个初始化表达式组成(括号优先,因此各自的优先级,和=不再相关).
再说一次,这纯粹是学术性的,因为第一个代码无效,无论是在C还是在C++中.我不知道你使用哪个编译器它接受这个代码.我(正确)抱怨
错误:数字常量之前的预期unqualified-id
1无论使用何种运算符,C++中的优先规则都适用.=并且,在OP的代码中没有引用operator=或operator,.然而,他们是运营商就C++而言(标准的§2.13),以及令牌的优先级=和,不依赖于它们的用法-恰巧, 总是比优先级较低=的语义无关.
不确定C++,但至少对于C,第一个是无效的语法,所以你不能真正谈论一个声明,因为它不编译.第二个是逗号运算符误用,结果为5.
所以,直截了当地说,不同之处在于第一个不是C而第二个不是.
您遇到了逗号运算符(,)的有趣边缘情况.
基本上,它接受前一个语句的结果并丢弃它,将其替换为下一个语句.
第一行代码的问题是operator precedence.因为=运算符的优先级高于,运算符,所以您将获得逗号链(1)中第一个语句的结果.
更正(感谢@jrok!) - 第一行代码既不编译,也不使用逗号作为运算符,而是使用表达式分隔符,它允许您一次定义多个相同类型的变量名.
在第二个中,所有第一个值都被丢弃,并且在项链(5)中给出最终结果.
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |