2010-05-13 11 views
3

je l'opérateur suivant défini dans une classe C++ appelé StringProxy:Expliquer ce C++ définition de l'opérateur

operator std::string&() 
{ 
    return m_string; 
} 

a) Qu'est-ce que cela et comment cela fonctionne? Je comprends l'idée de la surcharge de l'opérateur, mais ils ressemblent normalement à X operator+(double i).

b) Étant donné une instance de StringProxy, comment puis-je utiliser cet opérateur pour obtenir le m_string?

Répondre

3

Ceci est une méthode de conversion. Pour obtenir la m_string, utilisez simplement une distribution explicite: (std::string)stringProxy pour effectuer la conversion. Selon le contexte (par exemple, si vous assignez une chaîne), vous pouvez vous passer de la distribution.

+2

Je crois en général que C++ static_cast serait préférable à l'ancien cast C. –

+0

@Steven: Tout le monde n'est pas d'accord. http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=285 –

+1

IMO cet article est largement basé sur une prémisse que lorsque les gens programment en C, ils sont tous des gourous, alors que les programmeurs C++ sont des noobs non traitables. La distribution en style C ne fait pas automatiquement la bonne chose, elle fera quelque chose, le plus souvent un casting de réinterprétation. On a toujours besoin de savoir exactement ce qu'il fait dans chaque cas pour savoir s'il fait la chose désirée. - Et il y a un endroit où vous avez absolument besoin d'alternatives de type sécurité à la fonctionnalité non-safe de C: * templates *. – visitor

2

C'est un opérateur de casting. Ils prennent la forme de l'opérateur T() et permettent la conversion entre les types personnalisés. Vous pouvez sortir la chaîne std :: en l'assignant simplement à une chaîne ou à une référence.