EffectiveC++导读

声明式:告诉某个东西的名称和类型,但略去细节;

extern int x;                                   //对象声明式
std::size_t numDigits(int number);//函数声明式
class Widget;                               //类声明式
template<typename T>
class GraphNode;                      //模板声明式

函数声明揭示其签名式,也就是参数和返回类型。一个函数的签名等同于该函数的类型。
numDigits的签名:std::size_t (int).

定义式:为编译器提供声明式所遗漏的细节。
对对象而言:拨发内存的地点
对函数/函数模板而言:提供代码本体
对类/模板类而言:列出它们的成员

int x;//对象的定义式
std::size_t numDigits(int number) {...}//函数的定义式

初始化是给予对象初值的过程。
用户自定义类型的对象的初始化由构造函数执行。

default构造函数:一个可被调用而不带任何实参者。

class A{
public:
	A();
};
class B{
public:
	explicit B(int x=0, bool b = true);  //注意,这也是default构造函数
};
class C{
public:
	explicit C(int x);//non-default 构造函数
};

explicit:拒绝隐式类型转换,但仍可被用来进行显式类型转换。

void doSomething(B bObj);

B b1(14);
doSomething(b1);
doSomething(14);//错误!不支持隐式转换
doSomething(B(14));//正确,显式转换

将构造函数声明为explicit可以禁止编译器执行非预期类型转换。它通常更受欢迎。

“=”语法也可用来调用copy构造函数:

Widget w1; //default构造
Widget w2(w1); //copy构造
w2 = w1; //copy赋值操作符
Widget w3 = w2; //注意:此处调用了copy构造

区别“=”是copy构造还是copy赋值:
是否是一个新对象被定义。

pass by value意味着调用copy构造函数。
用户自定义类型pass by reference to const往往是个比较好的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值