C++ TIPS

TIPS 1 : 下面代码输出的是什么?


这个有关算数转换规则。算数转换规则定义了一个类型的转换层次,该层次规定了操作数按什么次序转换为表达式中最宽的类型。在众多类型的转换中,需要确保计算值的精度。有时候需要依赖于机器。例如:包含有unsigned short和int类型的表达式,如果int类型足够表示所有unsigned short的值,那么将unsigned short转换为int,否则转换为unsigned int;long和unsigned int类型也是类似的;而对于signed int 和 unsigned int之间,则会转化成unsigned int型。如同上面的例子。

TIPS 2: 函数重载
函数名字相同,而形参表不同,则称为函数的重载。(main函数不能被重载)
形参表相同,返回值也相同,称为函数的重复声明。(可以重复声明,但不能重复定义)
两个函数形参表相同,但是返回值不同,则第二个函数声明是错误的。

TIPS 3 : explicit
explicit关键字是用来修饰构造函数的。被explicit修饰的构造函数不能用作隐式转换。

TIPS 4 : 继承与转换
我们可以通过派生类的对象初始化基类的对象或者引用,可以通过派生类的引用初始化基类的引用。但是,对象之间的转换,和引用之间的转换有一些小的差异。例如: 输出:


如果把第32行的形参改成引用,例如: 输出:


可以看到,在派生类对象传递给基类的引用时,引用直接绑定到该对象,实参实际上仍然是派生类对象的引用。
与之不同的是,在派生类对象传递给基类的对象时,形参的类型是固定的——在编译和运行时都是基类对象。这时候实参是派生类对象的基类部分。
在派生类对象初始化或者赋值给基类对象时,调用的是基类的拷贝构造函数或者赋值操作符。将发生下列步骤:
(1) 将派生类对象转换为基类的引用。
(2) 将该引用作为实参传递给构造函数或者赋值操作符。
(3) 函数使用派生类的基类部分进行初始化或者赋值。

所以类一般定义copy构造和赋值操作符的时候,参数都是一个自己本身类的引用。思考一下:如果参数是一个对象而不是引用,会不会发生无限次调用copy构造或者赋值操作符的情况?

TIPS 5 : const 引用
const引用是指指向const对象或者常量的引用。不能修改引用所绑定的对象的值。将一个非const引用绑定到一个const对象或者常量上,是不合法的。

TIPS 6 : inline 函数
inline函数会在调用处直接展开。避免了保存寄存器,复制实参,跳到函数地址执行,再回复寄存器一系列过程。多用于比较短小的函数。大多数编译器不支持inline函数的递归。
inline函数的定义对于编译器来说必须是可见的。inline函数可能被定义多次,但是每个定义必须完全相同。所以把inline函数放入头文件中,可以确保在函数调用时的定义是相同的。并保证在调用点,该函数的定义对编译器可见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值