C new, за которым следует класс

#c #class #syntax #semantics

#c #класс #синтаксис #семантика

Вопрос:

Мы с другом работаем над древней кодовой базой C . В этом коде массив указателей CDelayEvent определяется следующим образом

 class CDelayEvent* m_pDelayEventList[DEF_MAXDELAYEVENTS];
  

и различные объекты в нем распределяются следующим образом

 m_pDelayEventList[i] = new class CDelayEvent;
  

Мой вопрос здесь заключается в использовании ключевого class слова в обеих строках. Код компилирует обе строки с ним и без него.

  1. Является ли это допустимым C ? Он компилируется, но мы никогда не видели этого раньше.
  2. Что делает class ключевое слово в этом контексте?
  3. Безопасно ли / лучше удалять его везде? Это вообще что-нибудь меняет?

Я ничего не смог найти об этой проблеме, потому что поиск «нового класса» находит только несвязанные статьи и вопросы.

Комментарии:

1. Это необязательно и может быть опущено.

Ответ №1:

Вы знаете C? Тогда вы знаете, как используется структура? И что вам нужно использовать struct ключевое слово, например, при объявлении переменной структуры?

В C структуры и классы действительно одинаковы, и C сделал необходимость в struct class ключевых словах and необязательной, чтобы структура или класс могли использоваться в качестве типа.

Итак, в вашем случае вы можете использовать class CDelayEvent or просто CDelayEvent , они семантически одинаковы.

Комментарии:

1. Я знаю C, но использование typedef для вызова struct mystruct по имени mystruct часто считалось плохой практикой — я бы никогда не догадался, что стандарт C использует это поведение в языке для классов.

2. @Kenji Он «встроен» как для классов, так и для структур, потому что они считаются типами.

Ответ №2:

  1. Является ли это допустимым C ? Он компилируется, но мы никогда не видели этого раньше.

ДА. Использовать его необязательно.

  1. Что делает ключевое слово class в этом контексте?

Ничего особенного.

  1. Безопасно ли / лучше удалять его везде? Это вообще что-нибудь меняет?

Да, его безопасно удалить. Это ничего не изменит.