2013-02-10 3 views
5

В C# я мог бы сделать это:Инициализация массива при использовании нового

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

Но я могу сделать что-то подобное в C++? Я пробовал:

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

Но он не компилируется.

+1

Попробуйте 'char a [] = {'a', 'a' , 'a'}; '. Намного легче! –

+1

Задайте размер: 'char * a = new char [3] {'a', 'a', 'a'};' – jrok

ответ

6

Это ошибка в спецификации C++ (которая не позволяет этой простой конструкции компилироваться). Вам необходимо указать размер

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

См. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1469. Обратите внимание, что если вы скопируете имя типа, это тип-идентификатор, а не new-type-id и, следовательно, синтаксически позволяет опустить выражение размера. Таким образом, вы можете быть в состоянии найти реализацию, которая позволяет сказать

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

Althought, ясно, что это не было явное намерение, что это возможно (и некоторые правила в пунктах new может быть интерпретировано, чтобы запретить Это).

+1

Я не думаю, что здесь нужно использовать «новый». Используйте стек или контейнер. – Inverse

+0

@ в обратном случае вы должны добавить это к вопросу как к комментарию. Я не рекомендую ничего в своем ответе. Я просто исправил его синтаксис. –

+0

все ответы, которые говорят о стеке-массивах или векторах, на самом деле не отвечают на его вопрос о синтаксисе нового. –

3

Я думаю, что вы хотите это:

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

почему бы просто не сделать это? :

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

Также избегайте использования массивов полностью. Использовать std::vector

+0

Было бы здорово добавить что-то в инициализаторы для 'std :: vector', например" если вам посчастливилось иметь компилятор, поддерживающий C++ 11, тогда вы можете так и так ». –

+0

@ Антон Коваленко Я не являюсь текущим на C++ 11, мой фокус переместился на C#. Но я бы не возражал, если вы хотите добавить что-то к ответу :-) –

1

Да, вы можете сделать это как;

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

Заканчивать Arrays (C++) из MSDN.

4

Возможно, вы не хотите использовать массив в C++. Вместо этого используйте std::vector.

Вы можете даже инициализировать его до 3 '.

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

Если ваш компилятор поддерживает C++ 11, вы даже можете использовать список инициализаторов.

std::vector<char> vectorOfChars{'a', 'a', 'a'}; 
0

string a = "aaa"; a [0], a [1] ..etc Это будет намного проще, если вы хотите сделать 2-D массивы строки ..etc

Смежные вопросы