Что делает это динамическое распределение?

Сегодня я узнал, что вы можете написать такой код на C++ и скомпилировать его:

int* ptr = new int(5, 6);

Какова цель этого? Я знаю, конечно, динамический new int(5) вещь, но здесь я потерялся. Есть какие-нибудь подсказки?

5 ответов

Решение

Вы используете оператор запятой, он оценивает только одно значение (самое правое).

Оператор запятой (,) используется для разделения двух или более выражений, которые включены, если ожидается только одно выражение. Когда набор выражений должен быть оценен для значения, учитывается только самое правое выражение.

Источник

Адрес памяти, на который указывает указатель, инициализируется значением 6 выше.

Просто сделайте это:

int* ptr = new int(6);

Что касается оператора запятой, используйте его, когда вы не можете выполнить желаемую задачу без него. Нет смысла применять такие приемы, как:

int* ptr = new int(5, 6);

5 игнорируется. это выделяет int в куче и инициализирует его в (5,6).

результатом набора операторов, разделенных оператором запятой, является значение последнего оператора, поэтому int инициализируется значением 6

Мой компилятор, g++, возвращает ошибку при попытке сделать это.

В каком компиляторе или коде вы это видели?

Я считаю, что это ошибка, которая означала выделение какого-то 2D-массива. Вы не можете сделать это в C++, однако. Фрагмент фактически компилируется, потому что он использует оператор запятой, который возвращает последнее выражение и игнорирует результаты всех остальных. Это означает, что утверждение эквивалентно:

int* ptr = new int(6);
Другие вопросы по тегам