Мало усилий было сделано для обеспечения совместимости между C ++ и C по мере развития двух языков.Обратите внимание, что стековые массивы переменной длины были в C с 1999 года, но не были включены в C ++ 11.Хотя они, как правило, не представляют вещи, противоречащие друг другу, комитет по С ++ не совсем склоняется назад, чтобы убедиться, что С ++ 11 совместим с версиями С, выходящими за пределы С89.
Кроме того, эта функциябыло бы довольно сложно в C ++, потому что struct
- это не более чем class
.И у анонимной структуры / класса должны быть все функции регулярной структуры / класса, да?Иначе, какой смысл иметь это?
Что бы значило построить безымянный struct
?Как бы вы определили конструктор?Нечто такое простое, как:
struct Foo
{
struct
{
size_t &x;
};
};
просто невозможно, потому что внутренний struct
не имеет конструктора.И нет способа указать один.struct
не может создать элементы другого struct
внутри него.
Для чего-то вроде этого:
struct Foo
{
size_t outer;
struct
{
void SomeFunc();
size_t x;
};
};
Что this
указатель получает SomeFunc
?Каким будет тип this
, безымянный и безымянный тип?Как бы вы определили SomeFunc
вне структуры?Имя SomeFunc
не может быть Foo::SomeFunc
, потому что SomeFunc
находится во внутренней области.
Это просто слишком сложно для C ++ иметь дело с.И, конечно, не стоит того, чтобы ломать голову над этой сложностью.