Ответы пользователя2079303 и jimifiki являются правильными. Я добавляю этот ответ, чтобы предоставить немного контекста.
Шаблон класса Null
используется для добавления нулевого значения, аналогичного тому, что None
находится в Python, и используется в качестве аргумента по умолчанию, когда (по какой-либо причине) мы хотим обнаружить, что вызывающий объект не прошел значение, в отличие от явно переданного значения «null», например, 0. Если бы мы сегодня должны были написать код, мы бы, скорее всего, пошли бы за boost::optional
(скоро это будет std::optional
), что дает более четкую семантику и явный объект nil
. Тем не менее, мы сохраняем Null
, чтобы не нарушать код клиента.
Для арифметических типов вещь работает, предоставляя специализацию Null
, которая при преобразовании в число дает ту, которая вряд ли будет передана как законное значение (по крайней мере, в контексте вызова); а именно максимальный доступный int или float в зависимости от типа. Для Array
это на самом деле не применяется: как вы видите, Null<Array>()
преобразует в пустой Array
, который код не может отличить от пустого экземпляра Array
, переданного явно. Тем не менее, можно утверждать, что пустой массив является нулевым значением в своем собственном праве (т. Е. Путем передачи пустого массива вы не передаете никаких значений, даже если вы передаете экземпляр Array
), поэтому такие разработки выполняются; то же самое относится к классу Date
, который имеет пустое состояние, возвращенное его специализацией Null
.
Именованное значение по умолчанию. – Jarod42
Что вы не понимаете? синтаксис специализации? цель этого класса в контексте QuantLib. – Jarod42
Оба.Я могу догадаться, что где-то определен класс Null, и здесь мы инициализируем его с помощью 'Array', но я не понимаю больше этого. и да в контексте квантлиба, что это делает? –