2013-08-25 5 views
6
void func(char**& arg1); 

int main() { 
    char* container[3] = { "First", "Second", "Third" }; 
    char** pCon = &container[0]; 

    func(pCon);   // This works 
    func(&container[0]); // no known conversion from char** to char**& 
} 

Ich vermisse hier eindeutig etwas. Meine Logik besagt, dass diese beiden dasselbe sein sollten.Char ** & Argument Verwirrung

+0

Was sollte das Gleiche sein? AFAIK, '&' ist nur eine Referenz, wenn Sie eine Variable/ein Objekt deklarieren. Andernfalls bedeutet es "Adresse von" – olevegard

+0

Sie übergeben einen Verweis auf ein temporäres zu einer Funktion, die eine nicht temporäre Lvalue-Referenz erwartet. – WhozCraig

+1

BTW, die Lockerung von Zeichenfolgenliteralen, die 'char *' Zeiger initialisieren, wird in C++ 11 entfernt (obwohl Compiler es wahrscheinlich immer noch akzeptieren). Das heißt, Ihre erste Definition sollte wirklich 'char const * container [3] = {...};' sein. –

Antwort

11

Sie können einen nichtkonstanten Verweis nicht an ein temporäres binden, z. B. können Sie ein temporäres Objekt, das Sie vom Operanden address-of erhalten haben, nicht an einen nichtkonstanten Verweis binden.

Verwandte Themen