java - 在施工时双重优先于 float

标签 java c++ constructor double

请解释:

我正在声明一个具有 2 个构造函数的类,如下所示:

class A {
public :
  A (double x) {cout << "DOUBLE \n";}
  A (float x) {cout << "FLOAT \n";}
};

然后:

A a (3.7);

此结果以 DOUBLE 作为输出。 我也在 java 上试过这个 - 同样的结果。 谁能解释一下为什么?

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

最佳答案

这是因为 3.7 文字是一个 double。如果您想要 float ,请使用3.7f。在 C++ 中,它在标准 2.14.4 Floating Literals 中指定。最相关的部分是

The type of a floating literal is double unless explicitly specified by a suffix. The suffixes f and F specify float, the suffixes l and L specify long double.

这没有回答为什么会这样。我想这是因为它在 C 中的方式,而在某种程度上,C 中的方式必须是任意的。

关于java - 在施工时双重优先于 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17481015/

相关文章:

java - TextField 中的 TextArea 中未显示字符串

java - 如何在没有重复值的情况下从递归方法正确返回 ArrayList<Object>?

c++ - 创建基类指针的 vector ,并将派生类对象传递给它(多态性)

constructor - 干净的代码 - 依赖注入(inject)

c++ - 我可以对字段和构造函数参数使用相同的名称吗?

java - 使用可比较和比较器接口(interface)

java流通过终端操作改变数据

c++ - 遍历整数类型的整个范围

c++ - 在 C++ 中为 OSX 创建共享库

Java - 将数组直接传递到构造函数中,而不是作为变量