栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言、C++ 歧义赋值运算符优先级

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言、C++ 歧义赋值运算符优先级

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 面对c里面给数组赋值,但索引在等号两侧都出现且至少一侧发生变化——歧义,解析编译器表现:
  • 一、实例代码及其等价形式
  • 总结


面对c里面给数组赋值,但索引在等号两侧都出现且至少一侧发生变化——歧义,解析编译器表现:

提示:这里可以添加本文要记录的大概内容:

前置条件:

     vector ae = {1, 2, 3, 4, 5};
     int i = 0;

提示:以下是本篇文章正文内容,下面案例可供参考

一、实例代码及其等价形式

左侧为实例代码,右侧注释为等价语句:

     ae[i] = ae[i = 1];       // 例一 ae[1] = ae[1], i = 1
     ae[i = 1] = ae[i];       // 例二 ae[1] = ae[0], i = 1
     ae[i = 1] = ae[i = 2];   // 例三 ae[1] = ae[2], i = 1
     ae[i = 2] = ae[i = 1];   // 例四 ae[2] = ae[1], i = 2
     ae[i] = ae[i++];         // 例五 ae[1] = ae[0], i = 1
     ae[i] = ae[++i];         // 例六 ae[2] = ae[2], i = 1
     ae[++i] = ae[++i];       // 例七 ae[2] = ae[1], i = 2

总结

上述三个例子表明,赋值运算符‘=’右侧的索引先于左侧索引进行变化:

  1. 当右侧索引变化,左侧索引无变化(例一、例六),右侧索引会影响左侧索引值(均变为1)。
    注意:例五同样是右侧索引有变化、左侧索引无变化类型,但因i++与++i在返回值上的顺序优先问题(++i返回i+1;i++返回i,之后再令i+=1),此例在执行时,赋值运算符‘=’右侧的索引先返回i原本的值0,再令i加1,此处的加1操作使i变为1,于是影响到左侧的索引i,结果就等价于ae[1]=ae[0]。
  2. 当左侧索引变化,右侧索引无变化(例二),右侧索引具备运算优先级,先于左侧索引确定为0,左侧索引后变化为1。
  3. 当两侧索引均有变化(例三、例四、例七),右侧索引先于左侧索引变化,左侧索引再进行自身的变化。
    特别的:对于例七,右侧索引使i变为1,左侧索引在此基础上再加1变为2,于是等价于:ae[2]=ae[1]。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931920.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号