opérateur de std::string() const?
Quelqu'un peut-il me dire ce que précisément
operator std::string()
signifie?
Vous devez vous connecter pour publier un commentaire.
Quelqu'un peut-il me dire ce que précisément
operator std::string()
signifie?
Vous devez vous connecter pour publier un commentaire.
C'est un opérateur de conversion qui permet à l'objet d'être explicitement ou implicitement coulé à std::string. Quand un tel casting se produit, l'opérateur est appelé et le résultat de la fonte est le résultat de l'invocation.
Comme un exemple d'un cast implicite, supposons que vous avez eu une fonction qui a accepté de type
std::string
ouconst std::string&
, mais pas le type d'objet donné. En passant votre objet de cette fonction aurait pour résultat la conversion de l'opérateur appelé, avec le résultat transmis à la fonction à la place de votre type.C'est un opérateur de cast. Toute la classe qui définit ce type peut être utilisé partout où un
std::string
est nécessaire. Par exemple,Opérateurs de Cast sont presque toujours une mauvaise idée, car il ya toujours une meilleure façon d'atteindre le même résultat. Dans le cas ci-dessus, vous êtes mieux définir
operator<<(std::ostream&, const Foo&)
.explicit operator std::string() …
d'exiger un cast explicite.error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&
La raison en est que leoperator<<
est définie comme une fonction de modèle, de sorte que vous devez avoir de correspondance exacte pour ses arguments, et le cast implicite n'est pas pertinent.std::cout << foo;
), il suffit de ne compile pas, parce que @EranMarom notéoperator<<
est une fonction de modèle. J'ai essayé. Le compilateur g++ 7.3, c++14) diterror: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'Foo')
.