Существует ли какое-либо значение, позволяющее видеть вложенные структуры вне структуры в C, но не на С++? Я не нашел ссылки или релевантности.
struct a
{
struct b{
};
};
int main(){
struct b var; // allowed in C not in C++.
}
Существует ли какое-либо значение, позволяющее видеть вложенные структуры вне структуры в C, но не на С++? Я не нашел ссылки или релевантности.
struct a
{
struct b{
};
};
int main(){
struct b var; // allowed in C not in C++.
}
Он действителен в C, потому что C имеет одно пространство имен, в котором определены все нелокальные типы (т.е. типы, не объявленные в функциях); нет областей охвата типов с использованием пространств имен или вложенности.
В С++ тип b
вложен как член класса a
, поэтому его имя должно быть квалифицировано с областью, в которой она объявлена.
Я считаю, что способность ссылаться на вложенные структуры вне структуры была удалена на С++, чтобы улучшить скрытие данных. Если вам нужно получить доступ к вложенной структуре извне, то она, вероятно, не должна быть вложенной структурой в первую очередь.
Википедия говорит: "В C и С++ можно определить вложенные типы структур, но область интерпретируется по-разному (в С++ вложенная структура определяется только в пространстве/пространстве имен внешней структуры)". (http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B). Он не говорит, почему, но по крайней мере он признает разницу.
Однако вы можете использовать оператор разрешения пространства имен для доступа к структуре.
поскольку область b находится внутри a, вы должны вместо этого использовать struct a::b
(и в отличие от C, ключевое слово struct необязательно).
Вы не можете объявить что-либо без рамки в С++ В вашем примере struct b лежит внутри struct a, компилятор не знает, где найти struct b
вы должны использовать
struct a :: b var;
В C нет ограничений для области видимости, но С++ обеспечивает ограничение