gpt4 book ai didi

c++ - 断言(3/2 == 1): Does this work?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:16 25 4
gpt4 key购买 nike

我刚刚了解到除法运算符的舍入行为在 C++ 11 之前没有定义。解决方案是使用 std::div。 ( Safely round to next smaller multiple )

我的程序总是假定 / 只会截断小数部分。作为快速修复,我想包含一个断言,这样如果有人在具有不同舍入行为的平台上进行编译,我至少会得到一个错误。

assert(3/2 == 1)static_assert(3/2 == 1) 会完成这项工作吗?或者这些常量是否会被编译器内部的算法优化掉,这可能与机器实际做的不同?

最佳答案

“我刚刚了解到除法运算符的舍入行为在 C++ 11 之前没有定义”。如果两个参数都是正整数,则不是这样。

3/2 == 1 是一个编译时常量表达式,值为 true,因此代码将编译为 assert(true) .

考虑使用 static_assert 进行编译时断言。

关于c++ - 断言(3/2 == 1): Does this work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33958148/

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