我应该用 0 还是 0.0 初始化一个浮点 (double,float) 变量?

Should I initialize a floating-point (double,float) variable with 0 or 0.0?

我的问题是: 我应该用 0 还是 0.0 来初始化像 doublefloat 这样的浮点变量(如果我想用等同于 [=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 时会发生类似的事情,但我不确定这部分。