Oui et Non
Cela dépend de la version de C++, vous utilisez.
- C++ 98 et C++ 03 ne prennent pas en charge
explicit
opérateurs de conversion de type
- Mais 11 C++ fait.
Exemple,
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
}
compiler avec g++ -std=c++0x
, vous obtiendrez cette erreur:
prog.cpp:13:20: error: conversion from 'A' to non-scalar type 'std::string' requested
Démo en ligne: http://ideone.com/DJut1
Mais dès que vous écrivez:
std::string s = static_cast<std::string>(a); //ok - explicit conversion
L'erreur disparaît: http://ideone.com/LhuFd
BTW, en C++ 11, l'opérateur de conversion explicite est appelée "opérateur de conversion contextuelle" si elle se transforme en booléen. En outre, si vous voulez en savoir plus sur les conversions implicites et explicites, lisez ce sujet:
espoir qui aide.
+1. Pourriez-vous poster un exemple de code C++ 11 s'il vous plaît? – FailedDev
@FailedDev: Terminé. :-) – Nawaz
Très gentil merci! – FailedDev