c++ 为什么内部类*定义*不能使用他们的父代?

栏目: C++ · 发布时间: 5年前

内容简介:http://stackoverflow.com/questions/41198075/why-cant-inner-class-definitions-use-their-parent
它是 well-known that one cannot have

您定义的类型的成员:

class Foo {
    Foo member;
};

原因是这是无限递归的,无限大的对象.但是,我们可以有静态成员:

class Foo {
    static Foo member;
};

我们可以这样做,因为Foo就像一个命名空间; Foo的实例不包含.member,所以没有无限的引用.换句话说,.member属于类,而不是实例.我想做的是非常相似的:

class Foo {
    class Bar {
        Foo member;
    };
};

Foo再次表现为命名空间. Foo的实例实际上是空的.我必须做一个非静态字段吧Foo :: bar;开始获取布局问题.不幸的是,我的编译器不同意( e.g. GCC ):

<source>:3:14: error: field 'member' has incomplete type 'Foo'
Foo member;
^~~~~~

由于什么技术原因是不允许的?

很长的故事,这比容许不容易.

下面是一个示例,显示可能有些困难:C可以将嵌套类定义与成员声明相结合,如下所示:

class Foo {
    class Bar {
        Foo member;
    } bar; // <<== Here
};

很明显,为什么这个定义是不允许的:不同于一个可以是OK的类定义,成员定义使得大小计算是不可能的.

当然,标准的作者可以允许类定义通过,而不用给编译器作者另外的工作.然而,看起来他们认为允许这个功能是不值得的,所以在声明一个实例的时候,它们并没有使它成为一个例外.

http://stackoverflow.com/questions/41198075/why-cant-inner-class-definitions-use-their-parent


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

像计算机科学家一样思考Python (第2版)

像计算机科学家一样思考Python (第2版)

[美] 艾伦 B. 唐尼 / 赵普明 / 人民邮电出版社 / 2016-7 / 49.00

本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程。贯穿全书的主体是如何思考、设计、开发的方法,而具体的编程语言,只是提供了一个具体场景方便介绍的媒介。 全书共21章,详细介绍Python语言编程的方方面面。本书从基本的编程概念开始讲起,包括语言的语法和语义,而且每个编程概念都有清晰的定义,引领读者循序渐进地学习变量、表达式、语句、函数和数据结构。书中还探讨了如何处理文件和......一起来看看 《像计算机科学家一样思考Python (第2版)》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码