2

我的问题是:我应该初始化一个浮点变量,比如 adoublefloatwith0还是更确切地说0.0(如果我想用一个等于0当然的值来初始化它)?

例如:

double var = 0.0;

相比:

double var = 0;

这有什么不同吗?


问题对 C 和 C++ 开放,因为我同时使用两者并且不想两次提出相同的问题。如果这两者在特别是这种情况下存在显着差异,请提及您关注的语言。

由于对 C++ 的一半关注,构造函数的情况也可能成为对该主题的影响,当然初始化通常是 C++ 中更广泛的主题,但我不知道这是否会影响答案。

非常感谢。

4

2 回答 2

4

正如@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原因Tint

于 2019-12-17T17:08:36.593 回答
1

你可以像这样初始化一个双精度:

double test = 0.0;

但是,如果您想 100% 正确执行浮点数,则必须像这样初始化:

float test = 0.0f;

f意味着它前面的数字是一个浮点数。如果您忽略它,该数字将被解释为双精度并自动转换回浮点数,因为您的变量是浮点类型。排除f在外不会造成任何真正的麻烦,但会引入不必要的开销。我相信当你用 0 而不是 0.0 初始化一个 double 时会发生类似的事情,但我不确定这部分。

于 2019-12-17T17:14:48.687 回答