gpt4 book ai didi

c++ - 在 C++ 中防止从 float 到 double 的隐式转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:10 25 4
gpt4 key购买 nike

基本上,如果我想要这样的东西,

double b = sin(2.2);

但是不小心写了这样的东西,

double b = sin(2.2f);

没有错误甚至警告消息,即使这显然会导致不同的、不准确的、因此不正确的结果。可以通过强制编译器不对 float 进行任何隐式转换来防止这种类型的错误。有什么方法可以实现这一点,无论是通过编译开关(最好在 Visual Studio 中)、一些智能宏,还是一个行为类似于 float/double 变量并声明其自己的运算符的类?

编辑:我也对使用运算符(例如 double b = 2.2f*2.2f)或赋值(double b=2.2f)解决类似问题感兴趣。

最佳答案

您可以使用 type_assert 实用程序。

例子:

#include <cmath>
#include <type_traits>

template<typename T, typename U>
const U& type_assert(const U& u) {
static_assert(std::is_same<T, U>::value, "...");
return u;
}

int main() {
double t = type_assert<double>(std::sin(2.2f));
}

如果预期的类型不同,那么它会给你一个编译器错误。如果它通过,编译器可能会优化它,至少在我使用 -O3 的情况下是这样。

关于c++ - 在 C++ 中防止从 float 到 double 的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24478897/

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