То, что Вы хотите сделать, вычитают два DateTimes (expiryDate и DateTime. Теперь). Это возвратит объект типа TimeSpan. TimeSpan имеет свойство "Days". Сравните то число с 30 для Вашего ответа.
Еще одно преимущество формы struct : если вам когда-нибудь понадобится передать Color функции, а затем взять ее размер:
void foo (Color c)
{
size_t s = sizeof(c);
}
Если вы используете форму массива , c будет интерпретироваться как Color *
(массивы передаются через указатель на их первый элемент), а sizeof (c)
будет равно sizeof (int *)
. Был там, сделал это, там укусил.
Изменить: форма структуры будет вести себя так, как (наивно) ожидалось.
Использование простого массива - плохая идея по нескольким причинам.
int []
распадается на int *
при использовании в списке параметров . operator =
для присвоения массивов. Либо struct
, либо boost :: array
подойдут гораздо лучше.
Возможно, структура не была выровнена так, как хотел исходный кодировщик. возможно, он был дополнен до 16 или 32 бит. Создание массива гарантирует отсутствие заполнения структуры. Было ли это передано в драйвер или какое-то аппаратное устройство?
Вы хотите, чтобы выражение массива могло зацикливаться.
Итак, если вы должны иметь формы [rgb]
, вы используете объединение, но это дает больше печатает.
:: вздох ::
Я полагаю, что массив использовался как кортеж, поэтому boost :: tuple можно рассматривать как альтернативу, которая лучше показывает намерение.
Возможное заполнение может стать проблемой при использовании массива структур, поскольку у вас могут возникнуть проблемы с преобразованием между ним и целями, ожидающими плотно упакованных RGB. В этом случае убедитесь, что заполнение именно то, что вы ожидаете, используя, например, pragma pack ()
.
Что касается того, что лучше .x или [], вы можете перегрузить оператор []
для структуры (в данном случае используется переключатель). Любой достойный компилятор оптимизирует это, чтобы оно было эквивалентно static_cast
, поэтому потери производительности не будет. Вы, конечно, можете присоединиться к профсоюзу, но это мало помогает. Другая возможность - реализовать .x () и т. Д. В терминах [].
В любом случае, я бы рекомендовал использовать структуру, как вы этого не делаете.