【effective c++读书笔记】【第0章】导读

本文详细解释了C++中的声明式与定义式的概念,并通过具体示例对比了两者之间的区别。此外,还介绍了默认构造函数、显式构造函数、拷贝构造函数及赋值操作的概念及其使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 所谓声明式(declaration)是告诉编译器某个东西的名称和类型,但略去细节。所谓定义式(definition)是提供编译器一些声明式所遗漏的细节。对对象而言,定义式是编译器为此对象拨发内存的地点。对function或function template而言,定义式提供了代码本体。对class或class template而言,定义式列出它们的成员。

 //声明式
extern int x;
std::size_t numDigits(int number);
class Widget;
template<typename T>
class GraphNode;

//定义式
int x;
std::size_t numDigits(int number){
	std::size_t digitsSoFar = 1;
	while ((number /= 10) != 0) ++digitsSoFar;
	return digitsSoFar;
}
class Widget{
public:
	Widget();
	~Widget();
	...
};
template<typename T>
class GraphNode{
public:
	GraphNode();
	~GraphNode();
	...
};

2、所谓default构造函数是一个可被调用而不带任何实参者。这样的构造函数要不没有参数,要不就是每个参数都有缺省值。构造函数被声明为explicit,可阻止它们被用来执行隐式类型转换,但仍可被用来进行显示类型转换。

class A{
public:
	A();//default构造函数
};
class B{
public:
	explicit B(int x = 0, bool b = true); //default构造函数
};

3、copy构造和copy赋值很容易区别。如果一个新对象被定义,一定会有个构造函数被调用,不可能调用赋值操作。如果没有新对象被定义,就不会有构造函数被调用,那么当然就是赋值操作被调用。pass-by-value意味着“调用copy构造函数”。

class Widget{
public:
	Widget();
	Widget(const Widget& rhs);
	Widget& operator=(const Widget& rhs);
	...
};
Widget w1;//调用default构造函数
Widget w2(w1);//调用copy构造函数
w1 = w2; //调用copy赋值操作符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值