2010-12-07 11 views

Antwort

6

Dies ist ein user-defined conversion, die Sie von einem benutzerdefinierten Typ in einen anderen Typ zu konvertieren.

Sie könnten so etwas tun, indem Sie es verwenden, um eine const char* von einem String8 Objekt zu erhalten.

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

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

Es geht nicht so sehr darum, wie Sie es verwenden (explizit), es implizit verwenden zu lassen. Wo würden Sie .c_str() für eine std::string verwenden, lassen Sie einfach die .c_str(). Natürlich ist das Problem Zweideutigkeit: std::string fehlt ein solcher Operator aus einem guten Grund, und Sie können gelegentlich finden, dass Sie den Operator explizit aufrufen müssen, damit der Compiler weiß, welches Verhalten zu verwenden ist.

EDIT: Beispiel in Reaktion auf UncleBens' Kommentar:

#include <iostream> 

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

int main() 
{ 
    X x; 

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

Explizit Aufrufen der Operatormittel ein String8 Gießens Zeiger auf char? – UncleBens

+0

@UncleBens: Siehe Beispiel zur Antwort hinzugefügt. –

Verwandte Themen