В C# я мог бы сделать это:Инициализация массива при использовании нового
char[] a = new char[] {'a', 'a', 'a'};
Но я могу сделать что-то подобное в C++? Я пробовал:
char *a = new char [] {'a', 'a', 'a'};
Но он не компилируется.
В C# я мог бы сделать это:Инициализация массива при использовании нового
char[] a = new char[] {'a', 'a', 'a'};
Но я могу сделать что-то подобное в C++? Я пробовал:
char *a = new char [] {'a', 'a', 'a'};
Но он не компилируется.
Это ошибка в спецификации 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
может быть интерпретировано, чтобы запретить Это).
Я не думаю, что здесь нужно использовать «новый». Используйте стек или контейнер. – Inverse
@ в обратном случае вы должны добавить это к вопросу как к комментарию. Я не рекомендую ничего в своем ответе. Я просто исправил его синтаксис. –
все ответы, которые говорят о стеке-массивах или векторах, на самом деле не отвечают на его вопрос о синтаксисе нового. –
Я думаю, что вы хотите это:
const char a[] = {'a', 'a', 'a'};
почему бы просто не сделать это? :
char a[] = {'a', 'a', 'a'};
Также избегайте использования массивов полностью. Использовать std::vector
Было бы здорово добавить что-то в инициализаторы для 'std :: vector', например" если вам посчастливилось иметь компилятор, поддерживающий C++ 11, тогда вы можете так и так ». –
@ Антон Коваленко Я не являюсь текущим на C++ 11, мой фокус переместился на C#. Но я бы не возражал, если вы хотите добавить что-то к ответу :-) –
Возможно, вы не хотите использовать массив в C++. Вместо этого используйте std::vector
.
Вы можете даже инициализировать его до 3 '.
std::vector<char> vectorOfChars(3, 'a');
Если ваш компилятор поддерживает C++ 11, вы даже можете использовать список инициализаторов.
std::vector<char> vectorOfChars{'a', 'a', 'a'};
string a = "aaa"; a [0], a [1] ..etc Это будет намного проще, если вы хотите сделать 2-D массивы строки ..etc
Попробуйте 'char a [] = {'a', 'a' , 'a'}; '. Намного легче! –
Задайте размер: 'char * a = new char [3] {'a', 'a', 'a'};' – jrok