Initialize array von char in der Initialisierungsliste des Konstruktors in C++
Ist es in Ordnung Initialisierung so?
class Foo
{
public:
Foo() : str("str") {}
char str[4];
};
Und?
int main()
{
char str[4]("str");
}
Beide geben mir einen Fehler in gcc 4.7.2:
Fehler: array als Initialisierer
Comeau kompiliert beide.
clang kompiliert auch, beides in C++03-Modus.
InformationsquelleAutor FrozenHeart | 2012-11-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser code ist gültiges C++03 und gcc ist einfach nicht konform hier.
Die Sprache, können Sie diese syntax bei der Initialisierung von Zeichen-arrays ist die gleiche, wie können Sie es für jede andere Art; es gibt keine Ausnahmen, die es verbieten würde verwendet werden, für Zeichen-arrays.
()
und=
Initialisierung gleichwertig sind in diesen Fällen und die Zeichen-array sollte einfach initialisiert werden gemäß 8.5.2.Hier eine bestätigte gcc bug-report, umfasst.
InformationsquelleAutor bames53
In C++03, die nicht-statische member-array können nicht initialisiert werden, wie Sie erwähnt. In der g++ kann man eine Erweiterung der Initialisierungsliste, aber das ist ein C++11 feature.
Lokale variable in einer Funktion initialisiert werden wie diese:
Obwohl Sie erwähnen die dimension als
4
, aber es ist besser nicht erwähnt, um versehentliche array out of bounds.Ich würde empfehlen
std::string
in beiden Fällen.Was ist die Rechtfertigung für die Annahme, dass Zeichen-arrays können nicht initialisiert werden, auf diese Weise? Von was ich gelesen habe in den standard-und den gcc-Fehler-Datenbank (siehe meine Antwort) es sieht für mich wie Zeichen-arrays können initialisiert werden, auf diese Weise.
InformationsquelleAutor iammilind
In C++03, das ist nicht möglich. Comeau compilieren, weil es von nicht-Standard-Erweiterung.
In C++11, können Sie dies tun:
Oder Sie lieber diesem intead:
Darüber hinaus könnten Sie überlegen, mit
std::string
oderstd::vector<char>
unabhängig von der version von C++, die Sie verwenden.Ich bin tot sicher, dass Sie nicht tun können, dass in C++03.
Die Tatsache, dass GCC lehnt dies wurde bestätigt, als ein bug in der GCC-bug-reporter.
InformationsquelleAutor Nawaz