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

时间:2011-09-25 07:31:38

标签: java c++ implicit-conversion explicit-conversion

  

可能重复:
  Implicit VS Explicit Conversion

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

3 个答案:

答案 0 :(得分:22)

显式转换是指使用某种语法告诉程序进行转换的地方。例如(在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 ++规范在相反的意义上使用它们。)

答案 1 :(得分:3)

你的意思是铸造? 隐含意味着你传递一个类型的实例,比如B,它继承自一个类型,比如说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.
}

答案 2 :(得分:0)

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

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