typedef'ing массив по сравнению с использованием структуры в C++

То, что Вы хотите сделать, вычитают два DateTimes (expiryDate и DateTime. Теперь). Это возвратит объект типа TimeSpan. TimeSpan имеет свойство "Days". Сравните то число с 30 для Вашего ответа.

5
задан ire_and_curses 13 September 2009 в 06:42
поделиться

6 ответов

Еще одно преимущество формы struct : если вам когда-нибудь понадобится передать Color функции, а затем взять ее размер:

void foo (Color c)
{
    size_t s = sizeof(c);
}

Если вы используете форму массива , c будет интерпретироваться как Color * (массивы передаются через указатель на их первый элемент), а sizeof (c) будет равно sizeof (int *) . Был там, сделал это, там укусил.

Изменить: форма структуры будет вести себя так, как (наивно) ожидалось.

5
ответ дан 18 December 2019 в 06:23
поделиться

Использование простого массива - плохая идея по нескольким причинам.

  • Тип int [] распадается на int * при использовании в списке параметров .
  • Вы не можете использовать operator = для присвоения массивов.

Либо struct , либо boost :: array подойдут гораздо лучше.

]
7
ответ дан 18 December 2019 в 06:23
поделиться

Возможно, структура не была выровнена так, как хотел исходный кодировщик. возможно, он был дополнен до 16 или 32 бит. Создание массива гарантирует отсутствие заполнения структуры. Было ли это передано в драйвер или какое-то аппаратное устройство?

8
ответ дан 18 December 2019 в 06:23
поделиться

Вы хотите, чтобы выражение массива могло зацикливаться.

Итак, если вы должны иметь формы [rgb] , вы используете объединение, но это дает больше печатает.

:: вздох ::

3
ответ дан 18 December 2019 в 06:23
поделиться

Я полагаю, что массив использовался как кортеж, поэтому boost :: tuple можно рассматривать как альтернативу, которая лучше показывает намерение.

0
ответ дан 18 December 2019 в 06:23
поделиться

Возможное заполнение может стать проблемой при использовании массива структур, поскольку у вас могут возникнуть проблемы с преобразованием между ним и целями, ожидающими плотно упакованных RGB. В этом случае убедитесь, что заполнение именно то, что вы ожидаете, используя, например, pragma pack () .

Что касается того, что лучше .x или [], вы можете перегрузить оператор [] для структуры (в данном случае используется переключатель). Любой достойный компилятор оптимизирует это, чтобы оно было эквивалентно static_cast (this) [index] , поэтому потери производительности не будет. Вы, конечно, можете присоединиться к профсоюзу, но это мало помогает. Другая возможность - реализовать .x () и т. Д. В терминах [].

В любом случае, я бы рекомендовал использовать структуру, как вы этого не делаете.

2
ответ дан 18 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

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