它是C语句的声明和初始化语句中的逗号运算符吗?
我正在阅读C编程语言,发现这句话:
如果是这样,他们是否在此代码中使用逗号运算符? int a=1,b=a+1,c=b+a+1,d=c+b+a+1; 我很确定它会起作用.但是如果它们不是逗号运算符并且不保证从左到右的顺序,则上述语句可能会失败,对吧? 解决方法
声明中的逗号不是表达式中的逗号运算符(声明不是表达式,尽管声明中的初始化是表达式).如果单独声明的逗号不是逗号运算符,则问题中的引用是准确的.
但是,每个声明符都以其后面的逗号或分号完成,因此问题中的变量定义是完全定义的行为.当它暗示从无法保证从左到右的评价时,引用是不正确的 – 虽然它是一个精巧的语言剖析.如果逗号是逗号运算符,则该事实将保证从左到右的评估;因为它们不是逗号运算符,所以从左到右的保证不会出现在逗号运算符的定义中.但是,因为每个声明符后面都有序列点,所以从左到右的估值是单独保证的. 在标准中找到正确的措辞来证明这种说法是比我预期的更难.它实际上是关于声明者的部分.
AFAICS,§6.7.9初始化程序不会添加任何相关内容. 序列点至关重要;这意味着在继续之前,左边的所有内容都得到了充分评估,副作用已经完成;它意味着从左到右排序,因此问题中的初始化是完全定义的. 序列点在完整的声明符之后,而不是初始化器,这有点奇怪;不过,我认为这不重要. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- oracle – 当用户取消程序ORA-01013时出现异常
- ruby-on-rails – Ruby on Rails:使用铲运算符更
- c#匹配整数和小数的正则表达式
- ruby-on-rails – Rspec 3 Rails 4带参数的模拟链
- c# – 如何隐藏DataGridViewComboBoxColumn的下拉
- Oracle Connect to Idle Instance解决方法
- ASP.NET获取客户端、服务器端的信息
- ruby-on-rails – 使用嵌套对象进行Rabl缓存
- ruby-on-rails – 如何使用Actionmailer / Ruby
- 数组 – 数组的Postgres UNIQUE CONSTRAINT