#c #class #syntax #semantics
#c #класс #синтаксис #семантика
Вопрос:
Мы с другом работаем над древней кодовой базой C . В этом коде массив указателей CDelayEvent определяется следующим образом
class CDelayEvent* m_pDelayEventList[DEF_MAXDELAYEVENTS];
и различные объекты в нем распределяются следующим образом
m_pDelayEventList[i] = new class CDelayEvent;
Мой вопрос здесь заключается в использовании ключевого class
слова в обеих строках. Код компилирует обе строки с ним и без него.
- Является ли это допустимым C ? Он компилируется, но мы никогда не видели этого раньше.
- Что делает
class
ключевое слово в этом контексте? - Безопасно ли / лучше удалять его везде? Это вообще что-нибудь меняет?
Я ничего не смог найти об этой проблеме, потому что поиск «нового класса» находит только несвязанные статьи и вопросы.
Комментарии:
1. Это необязательно и может быть опущено.
Ответ №1:
Вы знаете C? Тогда вы знаете, как используется структура? И что вам нужно использовать struct
ключевое слово, например, при объявлении переменной структуры?
В C структуры и классы действительно одинаковы, и C сделал необходимость в struct
class
ключевых словах and необязательной, чтобы структура или класс могли использоваться в качестве типа.
Итак, в вашем случае вы можете использовать class CDelayEvent
or просто CDelayEvent
, они семантически одинаковы.
Комментарии:
1. Я знаю C, но использование typedef для вызова
struct mystruct
по имениmystruct
часто считалось плохой практикой — я бы никогда не догадался, что стандарт C использует это поведение в языке для классов.2. @Kenji Он «встроен» как для классов, так и для структур, потому что они считаются типами.
Ответ №2:
- Является ли это допустимым C ? Он компилируется, но мы никогда не видели этого раньше.
ДА. Использовать его необязательно.
- Что делает ключевое слово class в этом контексте?
Ничего особенного.
- Безопасно ли / лучше удалять его везде? Это вообще что-нибудь меняет?
Да, его безопасно удалить. Это ничего не изменит.