2010-12-07 3 views

Répondre

6

C'est un user-defined conversion qui vous permet de convertir d'un type défini par l'utilisateur à un autre type.

Vous pourriez faire des choses comme ceci, en l'utilisant pour obtenir un const char* à partir d'un objet String8.

String8 str = "Hello"; 
const char *cptr = str; // gets const char* from str 

std::strlen(str); // std::strlen expects a const char* 
2

Il ne s'agit pas tant de la façon dont vous l'utilisez (explicitement) que de l'utiliser implicitement. Où vous utiliseriez .c_str() pour un std::string, laissez juste le .c_str(). Bien sûr, le problème est l'ambiguïté: std::string manque d'un tel opérateur pour une bonne raison, et vous pouvez parfois avoir à invoquer explicitement l'opérateur afin que le compilateur sache quel comportement utiliser.

EDIT: par exemple en réponse au commentaire de Unclebens:

#include <iostream> 

struct X 
{ 
    operator const char*() { return "hello world\n"; } 
}; 

int main() 
{ 
    X x; 

    std::cout << x.operator const char*(); 
} 
+0

invoquant Explicitement les moyens opérateur jetant un String8 char pointeur? – UncleBens

+0

@UncleBens: veuillez voir l'exemple ajouté pour répondre. –