Что делает это динамическое распределение? - PullRequest
6 голосов
/ 27 февраля 2010

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

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

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

Ответы [ 5 ]

13 голосов
/ 27 февраля 2010

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

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

Источник

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

1 голос
/ 27 февраля 2010

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

int* ptr = new int(6);

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

int* ptr = new int(5, 6);
1 голос
/ 27 февраля 2010

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

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

1 голос
/ 27 февраля 2010

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

int* ptr = new int(6);
1 голос
/ 27 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...