2010-09-02 3 views
5

Was ist die Bedeutung der folgenden Erklärung:Was die Bedeutung der Zeichen ist (& Test (...)) [2]

char (& test(...))[2]; 

ich es in einer Funktion Körper klebte wie und es kompiliert alle Recht. Ich weiß nicht, was ich damit anfangen kann, aber es besteht die Compilation.

Ich habe etwas ähnliches in this Antwort gefunden.

Antwort

3

Es ist die Deklaration einer Funktion, die eine Liste variabler Variablen nimmt und einen Verweis auf ein Array von 2 char zurückgibt.

Beachten Sie, dass, wenn eine Funktion wie diese definiert ist, die Parameter nicht zugänglich sind (über Standardmittel), da die <cstdarg> Makros eine variable Argumentliste benötigen, um einem benannten Parameter zu folgen.

Wenn Sie möchten, können Sie mit dieser Deklaration eine Funktion definieren und einen Verweis auf ein geeignetes Array zurückgeben. Sie können sie mit beliebigen Parametern aufrufen, wobei die Einschränkungen für ... Parameter gelten, die die Einschränkungen enthalten, dass das Übergeben von Nicht-POD-Klassentypen zu undefiniertem Verhalten führt.

z.

namespace 
{ 
    char samplearray[2]; 
} 

char (& test(...))[2] 
{ 
    return samplearray; 
} 
+0

Was macht ein anonymer Namespace im obigen Code? –

+0

Variablen, die im anonymen Namespace definiert sind, können nicht außerhalb der Datei, in der sich der Namespace befindet, "extern" werden. – Donotalo

1

Deklarieren Test als Vararg Funktion ist eine Referenz auf ein Array von 2 s char

Eine nützliche Stelle für de-Mangeln solche Erklärungen zurückkehr cdecl: C gibberish <-> English (obwohl es nicht tut verstehe Varargs und ist C orientiert und nicht C++).

+1

Wow, das ist eine lustige Seite. Ich kann einfach stundenlang auf "Refresh" klicken. – FireAphis

+0

@FireAphis Dann weißt du, dass es an der Zeit ist, professionelle Hilfe zu suchen; o) – Motti

Verwandte Themen