bryce @ 2024-11-29 09:56:04
#include<iostream>
using namespace std;
int a;
void solve(int x, int y){
cout << x << ' ' << y << '\n';
}
int main(){
solve(++a, ++a);
return 0;
}
如上代码中,输出为 2 1
,而不是 1 2
,由此可知,传参是有顺序的,所以在使用快读时,最好不要用 read() 直接传参,用一个变量储存后再传参,如下:
正确示例:
int l = read(), r = read();
solve(l, r);
错误示例:
solve(read(), read());
by qazsedcrfvgyhnujijn @ 2024-11-29 10:03:35
补充一下:可能与编译器有关,(看网上的博文说)clang的计算顺序是从左至右,而VS的计算顺序是从右至左。我自己测的 G++ 是从右往左的,有能力的谷民可以测一下其他的编译器。
by Magallan_forever @ 2024-11-29 10:09:03
所以代码不要写得太跳了
好冷的知识(:з」∠)
by Disjoint_cat @ 2024-11-29 10:11:57
这不是经典 UB 么?
by CJ_Fu @ 2024-11-29 10:15:54
好
by ImposterAnYu @ 2024-11-29 10:18:29
好
by liyixin0514 @ 2024-11-29 10:22:08
这是经典的 UB。
by liyixin0514 @ 2024-11-29 10:22:24
感谢提醒/bx
by Vector_Li @ 2024-11-29 10:24:18
++a
确实没有什么研究必要,多写几行不会有坏处的