摘要:
C语言编译中类型转换: C语言编译器只会在标准数据类型之间做转换。 隐式类型转换复习: 结果如下: 第26行的s和'b'转换为int类型再相加。 问题: 示例程序: 编译结果如下: 可以看到这种普通类型到类类型的强制转换是不被允许的。 将程序更改如下: 这时就可以正常编译通过了。 再论构造函数: 只 阅读全文
摘要:
值得思考的问题: 示例: 反汇编如下: 我们看到i++和++i对应的汇编是完全一样的。仅仅是寄存器不一样。 因为我们并没有使用这两行语句的返回值,而是单纯的两行i++和++i,所以编译器优化后,将返回值抛弃,因此它们的底层汇编是一样的。 linux下g++编译器的反汇编如下: 可以得到结论,独立的两 阅读全文
摘要:
逗号操作符: 我们如果重载逗号操作符,必须遵守上面的几点。特别是最后两点。 逗号操作符示例: 第35行等价于 j = 6。 重载逗号操作符: 重载逗号操作符要用全局函数。 示例程序: 我们将36行改成func调用的形式: 我们期望36行先计算func(t0),再计算func(t1),但是从输出结果可 阅读全文
摘要:
潜规则: 在C语言中并没有bool类型。C++中才有。 逻辑表达式示例: 添加func函数: 运行结果: 重载逻辑操作符: C++中允许重载逻辑与和逻辑或,重载逻辑操作符程序入下: 第42行我们期望只调用func(t0),但是从输出可以看到func(t1)也被调用了。而且先调用的是func(t1)。 阅读全文
摘要:
永恒的话题: 内存泄漏示例: 这段程序我们没有释放堆空间,造成了内存泄漏。 深度的思考: 一片堆空间最多只能由一个指针标识,这可以避免多次释放。杜绝指针运算和比较可以避免野指针。 C++中不存在这样的指针,我们需要自己实现。 解决方案: 这四条都是硬性规定,最后两条说的是同一个问题。 程序与运行结果 阅读全文
摘要:
关于赋值的疑问? 示例程序: 第22行是赋值操作符重载,返回值应该为引用类型,参数也应该为引用类型,否则容易出bug。 24行的判断为了避免自赋值。因为在C语言中,i = i这种自赋值是合法的,C++为了兼容C语言,t2 = t2这种自赋值也是合法的。 我们的数组类将拷贝构造定义为私有的,就是不允许 阅读全文
摘要:
客户需求: 需求的第二条比较难以实现,例如第一次调用返回1,第二次返回1,第三次返回2,第四次返回3。 也就是说fib函数是带状态的,每次返回的值都不同。 我们以前接触过的函数大多数都是无状态的。 简单的解决方案就是使用全局变量记录状态,而程序开发中全局变量又是不被推荐使用的,那么还有什么其它的方法 阅读全文