隐式转换和显式转换之间的区别

可能重复:
隐式VS显式转换

“隐式转换”和“显式转换”之间有什么区别? Java和C ++的区别是什么?

显式转换是指使用某种语法告诉程序进行转换的地方。 例如(在Java中):

int i = 999999999; byte b = (byte) i; // The type cast causes an explicit conversion b = i; // Compilation error!! No implicit conversion here. 

隐式转换是在没有任何语法的情况下进行转换的地方。 例如(在Java中):

 int i = 999999999; float f = i; // An implicit conversion is performed here 

应该注意的是(在Java中)涉及原始类型的转换通常涉及一些表示的改变,并且这可能导致精度损失或信息丢失。 相比之下,涉及引用类型(仅)的转换不会更改基本表示。


Java和C ++的区别是什么?

我不这么认为。 显然,可用的转换将是不同的,但“隐式”和“显式”之间的区别将是相同的。 (注意:我不是C ++语言的专家……但是这些单词在英语中具有自然意义,我无法想象C ++规范在矛盾的意义上使用它们。)

你的意思是铸造? 隐含意味着你传递一个类型的实例,比如B,它inheritance自一个类型,比如说A作为A.

例如:

 Class A; Class B extends A; function f(A a) {...}; main() { B b = new B; f(b); // <-- b will be implicitly upcast to A. } 

实际上有其他类型的隐式转换 - 在基元之间,使用默认构造函数。 您必须更具体地回答您的问题。

隐式默认构造函数:

 class A { A (B b) { ... }; } class B {}; main() { B b = new B(); A a = b; // Implict conversion using the default constructor of A, C++ only. } 

Casting是一种显式类型转换,在代码中指定,并且在编译时受制于极少数规则。 演员阵容可能不安全; 他们可能在运行时失败或丢失信息。
隐式转换是由编译器执行的类型转换或原始数据转换,以符合数据提升规则或匹配方法的签名。 在Java中,只执行安全的隐式转换:upcasts和promotion。

另外我建议阅读有关C ++隐式转换的内容: http : //blogs.msdn.com/b/oldnewthing/archive/2006/05/24/605974.aspx