Я пытаюсь понять некоторые с открытым исходным кодом
Я наткнулся на строку кода, которая напоминает
enum {
Thing1,
Thing2,
};
Мне было интересно, как работает этот enum? у него нет имени или typedef
Фактические строки кода можно найти Вот в строках 125 — 128
Это традиционное анонимное перечисление. Традиционные перечисления экспортируют свои символы во вложенное пространство имен:
namespace a{
enum {
Thing1, // a::Thing1
Thing2, // a::Thing2
};
}
Таким образом, в этом анонимном перечислении вам не нужно указывать имя перечисления для обозначения его членов, но это может привести к конфликтам имен из-за поведения экспорта символов во вложенное пространство имен:
namespace a{
enum {
Thing1, // a::Thing1
Thing2, // a::Thing2
};
enum namedEnum {
Thing1, // Error!
Thing2, // Error!
};
}
Эту конструкцию можно использовать для именованных констант, где фактическое значение неинтересно и единственным требованием является то, что значения констант различаются.