Сегодня я узнал, что вы можете написать такой код на C ++ и скомпилировать его:
int* ptr = new int(5, 6);
Какова цель этого? Я знаю, конечно, динамическую вещь new int(5), но здесь я потерялся. Любые подсказки?
new int(5)
Вы используете оператор запятой, он оценивает только одно значение (самое правое).
Оператор запятой (,) используется для разделить два или более выражений, которые включены, где только одно выражение ожидается. Когда набор выражения должны быть оценены для значение, только самое правое выражение считается.
Источник
Адрес памяти, на который указывает указатель, инициализируется значением выше 6.
Просто сделайте это:
int* ptr = new int(6);
Что касается оператора запятой, используйте его, когда вы не можете выполнить желаемое задание без него. Нет смысла применять такие трюки, как:
5 игнорируется. это выделяет int в куче и инициализирует его в (5,6).
результатом набора операторов, разделенных оператором запятой, является значение последнего оператора, поэтому int инициализируется значением 6
Я полагаю, что это ошибка, которая подразумевала выделение некоторого вида двумерного массива.Вы не можете сделать это в C ++, однако.Фрагмент фактически компилируется, потому что он использует оператор запятой, который возвращает последнее выражение и игнорирует результаты всех остальных.Это означает, что утверждение эквивалентно:
Мой компилятор g ++ возвращает ошибку при попытке сделать это.
В каком компиляторе или коде вы это видели?