Вы можете сделать что-то подобное, используя arguments
:
function multiply(s) {
return function () {
return Array.from(arguments).reduce(function(accumulator, currentValue) {
return accumulator * currentValue;
}, s);
}
}
Всегда инициализируйте свои указатели на ПУСТОЙ УКАЗАТЕЛЬ (то есть, 0). Из http://www.lysator.liu.se/c/c-faq/c-1.html:
Нулевой указатель концептуально отличается от неинициализированного указателя. Нулевой указатель, как известно, не указывает на любой объект; неинициализированный указатель мог бы указать где угодно.
Вы не должны проверять на не - ПУСТОЙ УКАЗАТЕЛЬ при вызове удаляет. Это явно определяется, чтобы ничего не сделать.
delete NULL; // this is allowed
Любой правильный код, который Вы пишете, не был бы затронут этими странными значениями, которые компилятор помещает в Ваше неинициализированное или уже освобожденную память. Это помещает те значения там, чтобы помочь Вам найти ошибки. Следовательно, у Вас есть ошибка.
Лучший способ устанавливает его в NULL, если это ни на что не указывает. Globals, указатели в других пространствах имен и локальные статические указатели автоматически инициализируются, чтобы быть нулевыми указателями. Участники класса и нормальные местные жители должны быть инициализированы к ПУСТОМУ УКАЗАТЕЛЮ вручную, если необходимо протестировать их против ПУСТОГО УКАЗАТЕЛЯ (некоторым людям нравится использовать 0
вместо этого. Конечно, это полностью эквивалентно).
Затем Вы можете проверить по ПУСТОМУ УКАЗАТЕЛЮ, но также и можете передать указатель сразу же на delete
, потому что это не будет иметь никакого эффекта для удаления нулевого указателя (гарантируемый Стандартом C++).
Вы задаете неправильный вопрос.
Ваши указатели никогда не должны получать эти значения во-первых. Вы не можете полагаться на компилятор для установки недопустимого указателя на что-то. всегда необходимо делать это сами путем присвоения ПУСТОГО УКАЗАТЕЛЯ ему.