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;
}