导读

本书的目的是告诉你如何有效运用C++。这里提供的是这个语言的使用导引,是你的软件易理解、易维护、可移植、可扩充、高效、并且有着你所预期的行为。

术语:

所谓声明式(declaration)是告诉编译器某个东西的名称和类型(type),但略去细节。下面都是声明式:

extern int x; //对象声明式
std::size_t numDigits(int number); //对象声明式
class Widget; //类声明式

template<typename T>
class GraphNode;       //模板声明式

每个函数的声明揭示其签名式,也就是参数和返回类型。一个函数的签名等同于该函数的类型。numDigits函数的签名是

std::size_t (int),也就是说“这函数获得一个int并返回一个std::size_t”。

定义式(definition)的任务是提供编译器一些声明式所遗漏的细节。对对象而言,定义式是编译器对此对象拨发内存的地点。对function或function template而言,定义式提供了代码本体。对class或class template而言,定义式列出他们的成员。

初始化(initialization)是“给予对象初值”的过程。对用户自定义类型的对象而言,初始化由构造函数执行。所谓default构造函数是一个可被调用而不带任何实参者。这样的构造函数要不没有参数,要不就是每个参数都有缺省值。

class A
{
public:
	A(); //default构造函数
};

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

上述的classes B和C的构造函数都被声明为explicit,这可阻止它们被用来执行隐式类型转换(implicit type conversions),但他们仍然可被用来进行显式类型转换(explicit type conversions);被声明为explicit的构造函数通常比其他non-explicit更受欢迎,因为他们禁止编译器执行非预期(往往也不被期望)的类型转换。除非有一个好理由允许构造函数被用于隐式类型转换,否则把它声明为explicit。

copy构造函数被用来“以同型对象初始化自我对象”,copy assignment操作符被用来“从另一个同型对象中拷贝其值到自我对象”;当你看到赋值符号时请小心,因为“=”语法也可用来调用copy构造函数:Widget w3 = w2;//调用copy构造函数

以by value传递用户自定义类型通常是个坏主意,Pass-by-reference-to-const往往是比较好的选择。

所谓客户(client)是指某人或某物,他(或它)使用你写的代码(通常是一些接口)。函数的客户是指其使用者,也就是程序中调用函数(或取其地址)的那一部分,也可以说是编写并维护那些代码的人。Class或template的客户则是指程序中使用class或template的那一部分,也可以说是编写并维护那些代码的人。说到“客户”通常我指的是程序员,因为程序员可能被迷惑、被误导、或因糟糕的接口而恼怒,他们所写的代码却不会有这种情绪。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值