2017-04-16 6 views
1

Ich war die C++ 11 Funktionen überprüft und die folgenden Codes sehen:Was bedeutet "const char (& a) [N]"?

class conststr { 
    const char* p; 
    std::size_t sz; 
public: 
    template<std::size_t N> 
    constexpr conststr(const char(&a)[N]): p(a), sz(N - 1) {} 
}; 

ich const char a[] weiß, aber ich bin ganz verwirrt mit const char(&a)[N], weiß jemand, wie das benutzen?

+0

Wissen Sie etwas über * Referenzen *? –

+0

Das macht großen Sinn, danke !! –

Antwort

1

Es ist ein Verweis auf Array const char der Größe N. Dies wird wahrscheinlich verwendet, um ein String-Literal als Argument zu akzeptieren.

conststr("whatever"); // ok 
char const * psz_whatever("whatever"); 
conststr(psz_whatever); // error 
+0

Danke, du hast Recht. Ich habe es auf den ersten Blick nicht erkannt. Ich frage mich, ob "const char * a" fast die gleiche Funktionalität wie "const char (& a) [N]" hat. –

+0

Also in meinem Fall funktioniert es nicht, wenn ich stattdessen "conetexpr constrstr (const char * a): p (a), sz (N - 1) {}" verwende. Ist das richtig? –

+0

'const char * a' ist fast das Gleiche, aber es erlaubt der Funktion, alle Zeiger zu akzeptieren, einschließlich' nullptr'. Beachten Sie, dass "constrstr" eine ** Template ** -Funktion ist, sodass wir "N" daraus schließen können. – VTT