**关闭。**此题需要debugging details。目前不接受答复。
编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
2天前关闭。
Improve this question
我有以下示例代码,我正在x86_64和aarch 64平台上编译和执行,但最终得到不同的输出。
#include <iostream>
int main()
{
double d = 2147483649;
int i = d;
std::cout << i << std::endl;
return 0;
}
x86_64上的输出:-2147483648 aarch 64的输出:2147483647*
为什么两种架构的输出存在差异。在aarch 64的情况下,是否需要传递任何选项给编译器,以使其行为与x86_64的行为一致?
我尝试在两个架构上按照“g++ a.cpp -o a.o”编译代码。我期望在两个架构上返回相同的“i”值。
1条答案
按热度按时间jtjikinw1#
这种转换是“未定义行为”,因此编译器可以做任何它想做的事情。
根据
[conv.fpint]
,浮点类型的纯右值可以转换为整数类型的纯右值。转换截断;即丢弃小数部分。截断后的值无法在目标类型中表示,则行为未定义。