Типы переменных Nullable - .value участник

Как другие упомянули, функтор является объектом, который действует как функция, т.е. он перегружает оператор вызова функции.

Функторы являются наиболее часто используемыми в алгоритмах STL. Они полезны, потому что они могут содержать состояние прежде и между вызовами функции, как закрытие на функциональных языках. Например, Вы могли определить MultiplyBy функтор, который умножает его аргумент на указанную сумму:

class MultiplyBy {
private:
    int factor;

public:
    MultiplyBy(int x) : factor(x) {
    }

    int operator () (int other) const {
        return factor * other;
    }
};

Тогда Вы могли передать MultiplyBy объект к алгоритму как станд.:: преобразуйте:

int array[5] = {1, 2, 3, 4, 5};
std::transform(array, array + 5, array, MultiplyBy(3));
// Now, array is {3, 6, 9, 12, 15}

Другое преимущество функтора по указателю на функцию состоит в том, что вызов может быть встроен в большем количестве случаев. При передаче указателя функции transform если , что вызов был встроен и компилятор не знает, что Вы всегда передаете ту же функцию ему, это не может встроить вызов через указатель.

7
задан skaffman 29 July 2009 в 20:12
поделиться

5 ответов

Свойство значения доступно только для чтения и возвращает фактический тип значения. Свойство value никогда не может иметь значение NULL.

Если вы ожидаете, что значение, допускающее значение NULL, вернется, проверьте .HasValue, а затем укажите Value. Например, если вы хотите присвоить значение Nullable обычному логическому типу, вам нужно указать его значение:

bool? nullableBool = null;

if (nullableBool.HasValue)
{
    bool realBool = nullableBool.Value;
}

Однако следующий не будет компилироваться:

bool? nullableBool = true;
bool realBool = nullableBool; // Won't work
13
ответ дан 6 December 2019 в 09:21
поделиться

Если вы хотите использовать методы / свойства базового типа. На самом деле не относится к bool. Позвольте мне проиллюстрировать это с помощью DateTime :

DateTime? d;
int month = d.Value.Month;

Вы не можете получить доступ к свойству Month непосредственно из d, потому что DateTime? не имеет этого свойства.

2
ответ дан 6 December 2019 в 09:21
поделиться

Для меня это не столько значение, сколько свойство HasValue, которое я считаю полезным

1
ответ дан 6 December 2019 в 09:21
поделиться

Единственная разница в том, что это 2 разных типа. Если у вас есть bool? , то это тип bool, допускающий значение NULL.

Если вы вызываете b.Value , вы фактически возвращаете bool , а не a bool? .

Незаметно, но когда вам нужна версия объекта, не допускающая значения NULL, используйте свойство .Value.

1
ответ дан 6 December 2019 в 09:21
поделиться

.Value возвращает логическое значение, а не логическое значение? что позволит вам использовать его в качестве параметра для функций, которые не ожидают типов, допускающих значение NULL.

3
ответ дан 6 December 2019 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: