Sì e No.
Dipende da quale versione di C++, che si sta utilizzando.
- C++ 98 e C++ 03 non supportano
explicit
operatori di conversione di tipo
- Ma C++ 11 fa.
Esempio,
struct A
{
//implicit conversion to int
operator int() { return 100; }
//explicit conversion to std::string
explicit operator std::string() { return "explicit"; }
};
int main()
{
A a;
int i = a; //ok - implicit conversion
std::string s = a; //error - requires explicit conversion
}
Compilatelo con g++ -std=c++0x
, si ottiene questo errore:
prog.cpp:13:20: error: conversion from 'A' to non-scalar type 'std::string' requested
Demo in linea: http://ideone.com/DJut1
Ma non appena si scrive:
std::string s = static_cast<std::string>(a); //ok - explicit conversion
L'errore scompare: http://ideone.com/LhuFd
proposito, in C++ 11, l'operatore di conversione esplicita viene indicato come "operatore conversione contestuale" se converte boolean. Inoltre, se volete sapere di più su conversioni implicite ed esplicite, leggere questo argomento:
Speranza che aiuta.
+1. Potrebbe postare un esempio del codice C++ 11 per favore? – FailedDev
@FailedDev: Fatto. :-) – Nawaz
Molto bello grazie! – FailedDev