我应该用 0 还是 0.0 初始化一个浮点 (double,float) 变量?
Should I initialize a floating-point (double,float) variable with 0 or 0.0?
我的问题是:
我应该用 0
还是 0.0
来初始化像 double
或 float
这样的浮点变量(如果我想用等同于 [=14= 的值来初始化它) ]当然)?
例如:
double var = 0.0;
与:
相比
double var = 0;
有区别吗?
C 和 C++ 的问题是开放的,因为我同时使用这两种语言并且不想重复提出相同的问题。如果这两者在特别是那种情况下存在显着差异,请说明您关注的是哪种语言。
由于只关注 C++,构造函数的大小写也可能对主题产生影响,当然初始化通常在 C++ 中是一个更广泛的主题,但我不知道这是否会影响答案与否。
非常感谢。
正如@NathanOliver 评论的那样,在这种情况下没有什么不同。但是总是说出你的意思是个好习惯:
double var = 0.0;
这个习惯会得到回报的地方是 std::accumulate
:
std::vector<double> v{1.2, 2.3, 3.4, 4.5, 5.6, 6.7, 7.8, 8.9, 9.0, 10.1};
double sum = std::accumulate(v.begin(), v.end(), 0); // 0 here is wrong!
这不会起作用,因为 std::accumulate
声明为:
template< class InputIt, class T >
constexpr T accumulate( InputIt first, InputIt last, T init );
所以 0
导致 T
成为 int
!
你可以像这样初始化一个 double:
double test = 0.0;
但是,如果您想 100% 正确地初始化浮点数,则必须这样初始化:
float test = 0.0f;
f
表示前面的数字是浮点数。如果您将其省略,该数字将被解释为双精度型并自动转换回浮点型,因为您的变量是浮点型的。将 f
排除在外不会造成任何真正的麻烦,但会引入不必要的开销。我相信当您仅使用 0 而不是 0.0 初始化 double 时会发生类似的事情,但我不确定这部分。
我的问题是:
我应该用 0
还是 0.0
来初始化像 double
或 float
这样的浮点变量(如果我想用等同于 [=14= 的值来初始化它) ]当然)?
例如:
double var = 0.0;
与:
相比double var = 0;
有区别吗?
C 和 C++ 的问题是开放的,因为我同时使用这两种语言并且不想重复提出相同的问题。如果这两者在特别是那种情况下存在显着差异,请说明您关注的是哪种语言。
由于只关注 C++,构造函数的大小写也可能对主题产生影响,当然初始化通常在 C++ 中是一个更广泛的主题,但我不知道这是否会影响答案与否。
非常感谢。
正如@NathanOliver 评论的那样,在这种情况下没有什么不同。但是总是说出你的意思是个好习惯:
double var = 0.0;
这个习惯会得到回报的地方是 std::accumulate
:
std::vector<double> v{1.2, 2.3, 3.4, 4.5, 5.6, 6.7, 7.8, 8.9, 9.0, 10.1};
double sum = std::accumulate(v.begin(), v.end(), 0); // 0 here is wrong!
这不会起作用,因为 std::accumulate
声明为:
template< class InputIt, class T >
constexpr T accumulate( InputIt first, InputIt last, T init );
所以 0
导致 T
成为 int
!
你可以像这样初始化一个 double:
double test = 0.0;
但是,如果您想 100% 正确地初始化浮点数,则必须这样初始化:
float test = 0.0f;
f
表示前面的数字是浮点数。如果您将其省略,该数字将被解释为双精度型并自动转换回浮点型,因为您的变量是浮点型的。将 f
排除在外不会造成任何真正的麻烦,但会引入不必要的开销。我相信当您仅使用 0 而不是 0.0 初始化 double 时会发生类似的事情,但我不确定这部分。