【发布时间】:2018-08-20 09:18:59
【问题描述】:
我的代码中有一个看起来像这样的函数:
bool foo(ObjectType& object){
//code
const float result = object.float_data + object.bool_data * integer_data;
//code
}
在寻找错误时,我发现result 有时具有不正确的值,原因是有时bool*integer 被计算为255*integer 而不是1*integer。
C++ 说在整数上下文中bool 被转换为零或一,所以我不明白这一点。我在代码的其他部分乘以bool,它工作正常。这也是随机的:有时它转换为1,有时转换为255。调试器还分别显示true 或255。当这个错误发生时,它总是发生在那个执行中。重新编译代码没有效果,它仍然随机发生。
【问题讨论】:
-
您能否发布重现确切问题的代码(包括
main函数)? -
可以是代码中其他地方UB的体现。
-
@rubenvb 不,程序是 50K+,但我会尝试用更小的程序来重现它。
-
@Someprogrammerdude 我发现 QA 转储对这个问题非常粗鲁。 1. 问题简洁明了(“为什么 C++ 标准保证的这种行为不会发生在我的代码中”)和 2. 提问者显然知道如何调试程序 - 结论就在问题中。如果你的观点是“你能在一个更小的程序中重现这个”,那么就这么说吧。仅仅因为某人没有花费数小时(或没有成功)尝试重现问题而可能有一个简单的答案,就将所有“学习如何提问”链接转储给某人,这是可怕的。
-
@MaxLanghof 我的意图不是粗鲁,只是为了欢迎新用户访问该站点并提供良好的链接以阅读有关如何成为高效成员以及如何编写好问题的信息。最后一点对于新手来说非常重要,因为即使这个问题对于一个全新成员的第一个问题来说不是很糟糕,但它在目前的形式下也是无法回答的。我们真正能做的就是给出可能的解决方法和毫无意义的猜测和推测。我们不能做的是给出一个关于为什么 OP 有这个问题的明确答案。