目录
C++表达式求值顺序的不确定性
error: multiple unsequenced modifications to [-Werror,-Wunsequenced]
C语言 自增运算符(前++后++)
------------------------------------------------------
// 代码 1
int tmp =0;
tmp =tmp++; // 左、右都含有 “tmp”,出现:警告信息 1。编译通过,但结果错误。
// 代码 2
tmp++; // OK
// 代码 3
int a, b =0, c =0;
a =b++; // 左、右的变量不同;OK.
qDebug()<<"a ="<<a;
警告信息 1:
abc.cpp:219:19: warning: multiple unsequenced modifications to 'tmp'
multiple:多重的;复合的;多次
unsequenced:运算顺序是未定的
modifications:改变;修饰子;更改
参考:
C++表达式求值顺序的不确定性_漫游宇宙sky的博客-CSDN博客
https://blog.csdn.net/sky4403/article/details/123010758
error: multiple unsequenced modifications to [-Werror,-Wunsequenced]
https://blog.csdn.net/blueboy12/article/details/120789906
week = ++week%7;
在做蓝桥云实验时看到这样一句话,在加了一些编译选项后会编译失败 error: multiple unsequenced modifications to ‘week’ [-Werror,-Wunsequenced]。然后去看了一下C/C++中关于序列点的内容,总结就是:
不要将自增或自减运算符 与赋值运算符等其他运算符 复合使用。
————————————————
版权声明:本文为CSDN博主「Grey@」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/blueboy12/article/details/120789906
===============================
C语言 自增运算符(前++后++)
https://blog.csdn.net/nanfeibuyi/article/details/80834983
二、前++后++ 的区别
无论前++,后++,最后都会自增1,区别在于是先自增,还是先参与运算。(自减与自增类似)。
前++:先进行++操作。
后++:后进行操作。
三、自减运算符
前--:先进行--操作。
后--:后进行操作。
rintf("i的值为%d\n", i++); //在这里,i++为后置++,先使用,后自加。所以i++整体的值为5,故输出为5,然后i再加1,值为6.
=============
自增运算符和数组下标的先后顺序
https://bbs.bccn.net/thread-454977-1-1.html
arr[t++] = 4;
arr[++t] = 4;
这两个语句也是遵循以下原则的:
++x ;自增后使用。
x++ :使用后再自增
可是,这都表明了:自增运算符的优先级大于数组下标[],这合理吗?我见过下面一段话:
后缀运算符,包括数组取下标[]、函数调用()、结构体取成员.、指向结构体的指针取成员->、后缀自增++、后缀自减--。如果一个操作数后面有多个后缀,按照离操作数从近到远的顺序(也就是从左到右)依次运算,比如 a.name++ ,先算 a.name ,再++,这里的 .name 应该看成 a 的一个后缀,而不是把 . 看成双目运算符。
单目运算符,包括前缀自增++、前缀自减--、 sizeof 、类型转换()、取地址运算&、指针间接寻址*、正号+、负号-、按位取反~、逻辑非! 。如果一个操作数前面有多个前缀,按照离操作数从近到远的顺序(也就是从右到左)依次运算,比如 !~a ,先算 ~a ,再求!。
----------------
++x ;自增后使用。
x++ :使用后再自增
不怪你,你被一些似是而非的邪书给害了,跟我念:
在C中++x这个表达式的值为原先x的值+1,副作用是x的值增加了1;(C++中不是这样定义的,不管它)
在C中x++这个表达式的值为原先x的值,副作用是x的值增加了1。
即记住几个词 表达式、表达式求值、副作用
抛弃所谓的“先”和“后”,重要的事说两遍:C/C++语言真的没有规定这里有先和后
另外,这两个表达式的值是左值,表达式求值后跟x已经没有关系了。
这都表明了:自增运算符的优先级大于数组下标[]
怎么得出这个逻辑的?这里根本就丝毫不涉及到运算符的优先级。
对于 arr[t++] 这个复合表达式而言,当然要先计算子表达式t++。
即记住几个词 复合表达式、子表达式
我见过下面一段话:……
看的东西还不少,可惜都是童话。
在给你几个词,你自己上网搜一下:C语言运算符优先级与结合方向