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