《Effective C++》第三版-0. 导读(Introduction)

术语(Terminology)

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

extern int x;  //对象(object)声明式
std::size_t numDigits(int number);  //函数(function)声明式
class Widget;  //类(class)声明式
template<typename T>;  //模板(template),“typename”的使用见条款42
class GraphNode;  

签名式(signature):每个函数的声明式揭示其签名式,即其参数和返回类型

//函数numDigits的签名是std:size_t (int),即获得一个int并返回一个std:size_t
std:size_t numDigits(int number); 

定义式(definition):提供变编译器一些声明式所遗漏的细节

int x;  //对象的定义式
std::size_t numDigits(int number)  //函数的定义式
{
	std::size_t digitsSoFar = 1;
	while ((number /= 10) != 0) ++digitsSoFar;
	return digitsSoFar;  //此函数返回其参数的数字个数
}

class Widget {  //class的定义式
public:
	Widget();
	~Widget();
	...
};

template<typename T>  //template的定义式
class GraphNode {
public:
	GraphNode();
	~GraphNode();
	...
};

初始化(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构造函数,因其参数没有缺省值
};

//explicit构造函数可阻止它们被用来执行隐式类型转换(implicit type conversions)
//但它们仍可被用来执行显示类型转换(explicit type conversions)
void doSomething(B bObject);  //函数,接受一个类型为B的对象

B bObj1;  //一个类型为B的对象
doSomething(bObj1);  //正确,传递一个B给doSomething函数
B bObj2(28);  //正确,根据int 28建立B
doSomething(28);  //错误!int不能被隐式转换为B
doSomethin(B(28));  //正确,使用B构造函数将int显示转换
  • copy构造函数用来以同型对象初始化自我对象
  • copy assignment操作符用来从另一个同型对象中拷贝其值到自我对象
class Widget {
public:
 Widget();  //default构造函数
 WIfget(const WIdget& rhs);  //copy构造函数
 Widget& operator=(const Widget& rhs);  //copy assignment操作符
 ...
};
Widget w1;  //调用default构造函数
Widget w2(w1);  //调用copy构造函数
w1 = w2;  //调用copy assignment操作符,赋值而非非初始化
//"="语法也可用来调用copy构造函数
Widget w3 = w2;  //调用copy构造函数,初始化而非赋值

copy构造函数定义一个对象如何passed by value

bool hasAcceptableQuality(WIdget w);
...
Widget aWidget;
if (hasAcceptableQuality(aWidget)) ...
//参数w以by value的方式传递给hasAcceptableQuality
//在上述调用中aWidget被复制到w体内,该动作由copy构造函数完成

命名习惯(Naming Conventions)

名称 含义
lhs left-hand side(左手端)
rhs right-hand side(右手端)
pt pointer to T(指向一个T型对象的指针)
rt reference to T
mf 成员函数

关于线程(Threading Consideration)

会在C++构件在多线程环境中有可能引发问题时指出,对多线程不熟悉或没需求可忽略相关讨论

TR1和Boost

  • TR1(Technical Report 1)是一份规范,描述加入C++标准程序库的新机能
  • Boot是个组织,也是个网站(https://www.boost.org/),提供可移植、同僚复审、源码开放的C++程序库
posted @ 2024-04-28 09:47  Roanapur  阅读(3)  评论(0编辑  收藏  举报