尽管写了
EXPECT_CALL()
和对模拟函数的调用 真的 未定义的行为?)...我还是不知道为什么Google说这是未定义的行为。
...否则这个行为就是未定义的。特别是,你不能把EXPECT_CALL()和对模拟函数的调用混在一起"(https:/github.comgooglegoogletestblobmastergooglemockdocsfor_dummies.md#using-mocks-in-tests。)
他们只是简单地掩盖了我上面的问题,重申其实是未定义的行为,但没有解释为什么。
有谁能解释一下为什么是未定义的行为以及如何定义的细节?
一般来说,未定义行为(UB)并不意味着它不能工作。它意味着不能保证它能工作。
另一种说法是,它更像是库作者和用户之间的合同,而不是对库的描述。
UB在这里的意思基本上就是 "不要依赖这个工作"。如果它确实有效,那就算你运气好,但不要指望它在其他东西改变时还能继续工作。
所以从本质上说。
我还是不明白为什么谷歌说这是未定义的行为?
他们不需要激励这个决定,因为这只是API设计的一部分。
现在,如果问题是 "为什么谷歌选择做出这种未定义的行为?" 那就另当别论了。
这样的框架下,答案可能也是。"保证在任何使用场景下都能正常工作" "这太费劲了,没有足够的收益,所以我们不会承诺"