Java 为什么从float返回方法返回double不会在c++;

Java 为什么从float返回方法返回double不会在c++;,java,c++,g++,javac,Java,C++,G++,Javac,我试图在Java中编译以下代码(只是一个片段): class MyClass{ public float get100(){ return 100.05; // returning 100.05f should work } } 但是正如您所看到的,100.5本质上是一个double,但是get100()通过其声明返回float,javac给出了如下错误:无法将double转换为float 这是完全可以理解的。但以下是我注意到的c++ 我尝试了以下代码

我试图在
Java
中编译以下代码(只是一个片段):

class MyClass{
        public float get100(){
        return 100.05;  // returning 100.05f should work
    }
}
但是正如您所看到的,
100.5
本质上是一个
double
,但是
get100()
通过其声明返回
float
javac
给出了如下错误:
无法将double转换为float

这是完全可以理解的。但以下是我注意到的
c++

我尝试了以下代码(几乎与上面提到的代码相似):

#包括
使用名称空间std;
类MyClass{
公众:
浮点get100(){
返回100.05;
}
};
int main(){
MyClass m;
cout:

浮点转换

浮点类型的prvalue可以转换为任何其他浮点类型的prvalue。如果转换列在浮点升级下,则它是升级而不是转换

  • 如果源值可以在目标类型中精确表示,则不会更改

  • 如果源值介于目标类型的两个可表示值之间,则结果是这两个值中的一个(由实现定义哪一个)

  • 否则,行为是未定义的

这里,情况是第二条规则。
100.05
不能精确地表示为
float
double
。对于
0.375
34
等值,将应用第一条规则,因为可以精确地表示源值

对于Java,返回是一个赋值上下文。声明:

分配上下文允许使用以下内容之一: *身份转换(§5.1.1) *扩大原语转换(§5.1.2) *拓宽参考转换(§5.1.5) *装箱转换(§5.1.7)后可选加宽参考转换 *取消装箱转换(§5.1.8)后可选地进行加宽原语转换


请注意,此处不允许隐式缩小转换,除非返回的值是常量(即编译器可以计算的最终字段或文字表达式)“C++ C++ java编译器是智能的,它可以自动转换为double,也可以是浮动。java编译器可以做同样的事情,但是Java程序员决定最好不要允许它,如果程序员是错误的。< /P > 1)java和C++是不同的语言。2)编译器不会随机地构成行为。他们遵循RUL。锿。
#include<iostream>
using namespace std;
class MyClass{
        public:
               float get100(){
                    return 100.05;
               }
};

int main(){
MyClass m;
cout<<m.get100()<<endl;
return 0;
}