C++前置声明 forward declaration

本文深入探讨了C++中类的前置声明与包含头文件的区别,解释了为何前置声明仅能用于指针,以及其在不完全类型信息下的工作原理。通过实例对比,阐述了这两种方式在内存布局和编译效率上的影响。
// main.cpp

int main()
{
	return 0;
}

 

// a.h
#pragma once
#include "b.h"

class A
{
	B* b;
};

 

#if 0
// b.h
//错误
#pragma once
#include "a.h"

class B
{
public:
	A *c;
};

#endif

#if 0
// b.h 
//正确
#pragma once
#include "a.h"

class A;
class B
{
public:
	A *c;
};

#endif

#if 1
// b.h
//正确,并且可以不用包含a.h
#pragma once

class A;
class B
{
public:
	A *c;
};

#endif

 

类的前置声明和包含头文件的区别在于类的前置声明是告诉编译器有这种类型,但是它没有告诉编译器这种类型的大小、成员函数和数据成员,而包含头文件则是完全告诉了编译器这种类型到底是怎样的(包括大小和成员)。这下我们也明白了为何前置声明只能使用指针来进行,因为指针大小在编译器是确定的。

参考:对类前置声明和包含头文件的一点理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值