Объявление массивов в С++

185
10 сентября 2018, 20:30

Инициализация массива в Java:

int[] array = new int[10];

В то время как в С++:

int array[10]; 

Вопрос. Есть какая-то разница в том, что в С++ не используется оператор new и когда используется new, а когда нет?

С джавы я уже привык, что запись: int array[] - это только создания ссылки.

Answer 1

Аналогом джавового выражения в C++ будет int *arr = new int[10];, ибо иначе массив выделяется на стеке, а не в хипе.

Семантики выражения int array[10]; в Java нет.

Answer 2

В C++ более-менее value semantics, в частности, для обычного типа объявление локальной переменной автоматически означает создание на стеке локального объекта, который эта переменная и представляет. new — операция создания объекта где-то в памяти, его время жизни при этом в простейем случае никак не зависит от local scope; чтобы можно было написать var = new Class;, переменная var должна (без дополнительных телодвижений) иметь тип "указатель, совместимый с Class *".

READ ALSO
Не устанавливается библиотека boost

Не устанавливается библиотека boost

Уже второй день пытаюсь установить библиотеку boost, никак не получается

222
Помогите исправить ошибку: use of undeclared identifier 'n'

Помогите исправить ошибку: use of undeclared identifier 'n'

Помогите исправить ошибку в программе по подсчету колмонет

193
Exception at 0x7fff0ce8e878, code: 0xc0000005: read access violation at: 0xffffffffffffffff, flags=0x0 (first chance)

Exception at 0x7fff0ce8e878, code: 0xc0000005: read access violation at: 0xffffffffffffffff, flags=0x0 (first chance)

У меня стала возникать ошибка : Exception at 0x7fff0ce8e878, code: 0xc0000005: read access violation at: 0xffffffffffffffff, flags=0x0 (first chance)

331
Проблемы с созданием итератора

Проблемы с созданием итератора

Выполняю вот это заданиеНеобходимо написать итератор на лист векторов

221