警示后人(关于 cin)

P1527 [国家集训队] 矩阵乘法

CmsMartin @ 2022-12-23 14:10:31

使用 std::cin 输入多个元素时,使用

cin >> Ask[++Cnt].x1 >> Ask[Cnt].y1 >> Ask[Cnt].x2 >> Ask[Cnt].y2 >> Ask[Cnt].k;

会有问题,要

Cnt++;
cin >> Ask[++Cnt].x1 >> Ask[Cnt].y1 >> Ask[Cnt].x2 >> Ask[Cnt].y2 >> Ask[Cnt].k;

by 可爱妹妹交流群Official @ 2022-12-23 14:14:13

额为什么第二个的第二行还要 ++Cnt?


by Kedit2007 @ 2022-12-23 14:17:43

同样的一段代码:

#include <iostream>

int funcA()
{
    std::cout << "A" << std::endl;
    return 0;
}

int funcB()
{
    std::cout << "B" << std::endl;
    return 1;
}

int main()
{
    std::cout << funcA() << funcB() << std::endl;
}

在不同编译器下出现了至少两种不同的输出:

B
A
01
A
0B
1

by liqingyang @ 2022-12-23 14:26:17

UB


by esquigybcu @ 2022-12-23 14:32:51

@CmsMartin 函数先求值哪个参数是 unspecified,开了 -Wall 会给你报警告


by CmsMartin @ 2022-12-23 14:34:23

调了好久好久好久 甚至重构了一遍整体二分


by CmsMartin @ 2022-12-23 14:34:44

@3b9aca07 打错了 不好意思


|