2013-02-10 10 views
5

In C#, ich könnte dies tun:Array-Initialisierung, wenn neue

char[] a = new char[] {'a', 'a', 'a'}; 

Aber kann ich so etwas wie die in C++? Ich habe versucht:

char *a = new char [] {'a', 'a', 'a'}; 

Aber es kompiliert nicht.

+1

Versuchen Sie 'char a [] = {'a', 'a' , 'a'}; '. Viel einfacher! –

+1

Geben Sie die Größe an: 'char * a = neues Zeichen [3] {'a', 'a', 'a'};' – jrok

Antwort

6

Dies ist ein Fehler in der C++ - Spezifikation (die dieses einfache Konstrukt nicht kompilieren lässt). Sie müssen die Größe liefern

char *a = new char [3] {'a', 'a', 'a'}; 

Siehe http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1469. Beachten Sie, dass, wenn Sie den Typnamen in Klammern geben, es eine Typ-ID und nicht eine New-Type-ID und damit syntaktisch ermöglicht es Ihnen, die Größe Ausdruck weglassen. So können Sie in der Lage sein, eine Implementierung zu finden, die Sie

char *a = new (char[]){'a', 'a', 'a'}; 

Althought zu sagen erlaubt ist es klar, dass es nicht die ausdrückliche Absicht, dass dies möglich ist (und einige Regeln in den new Absätze interpretiert werden können, verbieten es).

+1

Ich denke nicht, dass "neu" hier verwendet werden sollte. Verwenden Sie den Stapel oder einen Container. – Inverse

+0

@inverse sollten Sie das als Frage zu der Frage hinzufügen. Ich empfehle nichts in meiner Antwort. Ich habe gerade seine Syntax festgelegt. –

+0

Alle Antworten, die über Stack Arrays oder Vektoren sprechen, beantworten seine Frage zur Syntax von new nicht wirklich. –

3

Ich denke, was Sie wollen, ist dies:

const char a[] = {'a', 'a', 'a'}; 
6

, warum dies nicht nur tun? :

char a[] = {'a', 'a', 'a'}; 

Vermeiden Sie auch die Verwendung von Arrays vollständig. Verwenden Sie std::vector

+0

Es wäre großartig, etwas auf Initialisierungen für 'std :: vector' hinzuzufügen, wie" Wenn Sie Glück haben, einen Compiler zu haben, der C++ 11 unterstützt, dann können Sie so und so. " –

+0

@AntonKovalenko Ich bin nicht aktuell auf C++ 11, mein Schwerpunkt hat sich auf C# verschoben. Aber es würde mir nichts ausmachen, wenn du etwas zur Antwort hinzufügen willst :-) –

1

Ja, Sie können es tun, wie;

char a[] = {'a', 'a', 'a'}; 

Check out Arrays (C++) von MSDN.

4

Wahrscheinlich möchten Sie kein Array in C++ verwenden. Verwenden Sie stattdessen eine std::vector.

Sie können es sogar zu 3 'a's initialisieren.

std::vector<char> vectorOfChars(3, 'a'); 

Wenn Ihr Compiler C++ 11 unterstützt, können Sie sogar eine Initialisierungsliste verwenden.

0

Zeichenfolge a = "aaa"; a [0], a [1] ..etc Dies wird viel einfacher, wenn Sie 2-D-Arrays von Zeichenketten machen möchten ..etc

Verwandte Themen