在结构化时双重优先于浮动

Ran*_*dan 2 c++ java double constructor

请解释:

我正在声明一个包含2个构造函数的类如下:

class A {
public :
  A (double x) {cout << "DOUBLE \n";}
  A (float x) {cout << "FLOAT \n";}
};
Run Code Online (Sandbox Code Playgroud)

然后:

A a (3.7);
Run Code Online (Sandbox Code Playgroud)

这个结果以DOUBLE作为输出.我也尝试过这个java - 同样的结果.有谁能解释为什么?

编辑:我确实认识到double是数字的默认类型,例如3.7我的问题是为什么以及如果有充分的理由.

jua*_*nza 5

这是因为3.7文字是一个double.如果你愿意float,请使用3.7f.在C++中,它在标准2.14.4浮动文字中指定.最相关的部分是

double除非后缀明确指定,否则浮动文字的类型除外.后缀fF指定 float,后缀lL指定long double.

这不能解释为什么会这样.我想这是因为它在C中的方式,以及它在C中的那种方式必须在某种程度上是任意的.

  • @RanEldan然后你应该编辑你的问题以澄清你的要求. (5认同)