首页 / 知识
关于c ++:为什么不能将向前声明用于std :: vector?
2023-04-13 19:09:00

Why can't a forward declaration be used for a std::vector?如果我像这样创建一个类:
并像这样使用它:
编译
编译器在生成适当的布局信息之前需要知道" B"有多大。相反,如果您说 实际上,如果在知道B类型的编译单元中实现A的构造函数,则您的示例将构建。 一个std :: vector实例,无论T是什么,都具有固定的大小,因为正如其他人之前所说,它仅包含一个指向T的指针。但是vector的构造函数取决于具体类型。您的示例无法编译,因为A()试图调用向量的ctor,在不知道B的情况下无法生成该向量。这是可行的: A的声明:
A的实现:
现在,A的用户只需要知道A,而不必知道B:
要实例化A :: v,编译器需要知道B的具体类型。 如果您想尽量减少#included行李的数量以提高编译时间,则可以做两件事,它们实际上是彼此不同的: 它不仅需要B的大小。例如,现代的编译器将有一些花哨的技巧,可以在可能的情况下使用memcpy来加速矢量副本。这通常是通过部分专注于元素类型的POD来实现的。根据前向声明,您无法判断B是否是POD。 就像fyzix所说的那样,前向声明不起作用的原因是由于内联构造函数。即使是空的构造函数,也可能包含很多代码,例如非POD成员的构造。在您的情况下,您有一个要初始化的向量,而没有完全定义其模板类型就无法执行。 析构函数也是如此。该向量需要模板类型定义来告知销毁它所拥有的实例时要调用的析构函数。 为了摆脱这个问题,只是不要内联构造函数和析构函数。在完全定义B之后的某个地方分别定义它们。
了解更多信息, 不管使用矢量还是尝试实例化一个B都无关紧要。实例化需要对象的完整定义。
伙计,您要使用不完整的类型实例化 之所以不能使用前向声明,是因为B的大小未知。 在您的示例中,没有理由不能将B.h包含在A.h中,那么您到底要解决什么问题? 编辑:还有另一种方法可以解决此问题:停止使用C / C ++!到了1970年代...;) |
最新内容
相关内容
python创建一个集合?
python创建一个集合?,异常,代码,括号,元素,函数,方法,两个,整数,操作,字符串,在Python中,集合是一种无序且不重复的数据类型,可以用于存储一组元五个用于Python前端开发的工具
五个用于Python前端开发的工具,代码,工具,项目,设计,软件,在线,基础,平台,状态,业务,Python是一种高度通用且功能强大的编程语言,其特质使其非什么是Python语言?主要应用于哪些领
什么是Python语言?主要应用于哪些领域?,分析,人工智能,数据,公司,金融,人员,网络,量化交易,全球,时间,在当今社会,Python是一种非常流行的编程语用于业余项目的优秀 Python 库
用于业余项目的优秀 Python 库,数据,工具,项目,信息,培训,系统,地图,下来,工作,管理,1.在数据库中即时保存数据:Dataset当我们想要在不知道最python 用于序列操作的常用内置函
python 用于序列操作的常用内置函数,较大,培训,列表,函数,元素,对象,参数,操作,字符串,序列,len(列表):返回列表中的元素个数,同样适用于元组、Python怎么创建一个类
Python怎么创建一个类,设计,第一,员工,名称,信息,培训,方法,实例,变量,部类,python从设计之初就已经是一门面向对象的语言,正因为如此,在Pythonpython声明变量
python声明变量,培训,代码,变量,赋值,字符串,类型,语句,函数,上面,声明,首先,在Python解释器中输入如下内容:>>>a=5上面代码没有生成任何输出,只python声明变量类型
python声明变量类型,培训,代码,基础,变量,赋值,类型,字符串,语句,函数,上面,对于没有编程基础的读者,可以先不编写真正的Python程序,而是先打开python变量不需要声明吗
python变量不需要声明吗,培训,数字,变量,代码,合法,声明,类型,整数,字符串,布尔,Python中常见的数据类型有字符串,整形,列表,元组,字典等。在Pythpython怎么声明变量
python怎么声明变量,培训,通用,一致,数字,变量,声明,字符串,引号,方式,类型,python声明变量:1、变量声明声明变量的时候,直接使用例如a=1这样的python变量使用前需声明嘛
python变量使用前需声明嘛,培训,代码,基础,变量,赋值,字符串,类型,语句,函数,上面,Python使用等号(=)作为赋值运算符,例如a=20就是一条赋值语python需要声明类型吗
python需要声明类型吗,数据,培训,中心,类型,声明,语言,变量,内存空间,内存,整数,在其他语言中,例如C/C++语言中在存储一个数据之前,都需要在内