gpt4 book ai didi

c++立即使用先前读取的变量与cin一起读取

转载 作者:太空狗 更新时间:2023-10-29 23:25:24 27 4
gpt4 key购买 nike

在我的某些在线判断代码中的某处,我有以下内容:

vector<int> arr(1 << 20);

int p;
cin >> p >> arr[p];

当使用 judge 的编译器(虽然我无法访问他们的机器)编译器 g++ 4.9.2 但在我的本地 Apple LLVM 6.0 版 (clang-600.0.57)

但是写成:

int p;
cin >> p;
cin >> arr[p];

judge 上也能正常工作。这是一个已知的东西/错误吗?为什么第一个版本没有按预期工作?

最佳答案

由于运算符重载,您的第一个代码等效于:

operator >> (operator >> (std::cin, p), arr[p]);

函数参数 operator >> (std::cin, p)arr[p] 的计算是无序的。当您尝试以无序的顺序读取 写入 p 时,您会得到未定义的行为。

可能发生的情况是,在这个特定实例上,您的实现从左到右计算参数,但法官的实现从右到左计算,并使用未初始化的 索引 arr >p.

关于c++立即使用先前读取的变量与cin一起读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31700184/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com