/ / Різниця між неявним перетворенням і явним перетворенням [дублікат] - java, c ++, неявне перетворення, явне перетворення

Різниця між неявним перетворенням та явним перетворенням [duplicate] - java, c ++, implicit-conversion, explicit-conversion

Можливі дублікати:
Неявне явне перетворення VS

У чому різниця між "неявним перетворенням" і "явним перетворенням"? Чи відрізняється різниця в Java і C ++?

Відповіді:

17 за відповідь № 1

Явне перетворення полягає в тому, де ви використовуєте певний синтаксис скажи програми для виконання перетворення. Наприклад (у 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 ++ використовують їх у суперечливому сенсі.)


2 для відповіді № 2

Ви маєте на увазі кастинг? Неявно означає, що ви передаєте екземпляр типу, скажімо 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.
}

0 для відповіді № 3

Кастинг є явним перетворенням типів, вказаним у коді, і під час компіляції застосовується дуже мало правил. Зліпки можуть бути небезпечними; вони можуть провалитися під час виконання або втратити інформацію.
Неявне перетворення - це перетворення типу або aпримітивне перетворення даних, що виконується компілятором для дотримання правил просування даних або відповідності підпису методу. У Java виконуються лише безпечні неявні перетворення: оновлення та розкручування.

Також я пропоную прочитати про C ++ приховане покриття: http://blogs.msdn.com/b/oldnewthing/archive/2006/05/24/605974.aspx