避免返回内部数据的句柄
对象a:亲爱的,永远别变心!
对象b:别担心,亲爱的,我是const。
然而,和现实生活中一样,a会怀疑,”能相信b吗?” 同样地,和现实生活中一样,答案取决于b的本性:其成员函数的组成结构。
C++应该说是计算机语言里最难的,所以有很多问题会让学习C++的人不理解,比如为什么java可以设计哪么好用,为什么C++不可以。主要从这些方面讨论一下,讲为什么会设计成这样
对象a:亲爱的,永远别变心!
对象b:别担心,亲爱的,我是const。
然而,和现实生活中一样,a会怀疑,”能相信b吗?” 同样地,和现实生活中一样,答案取决于b的本性:其成员函数的组成结构。
在项目设计之前就要对全局名字空间进行划分,这样在后绎编程就不会有在取名时怕重复问题。
假设想写一个类模板Array,它所生成的类除了可以进行上下限检查外,其它行为和C++标准数组一样。设计中面临的一个问题是怎么禁止掉Array对象之间的赋值操作,因为对标准C++数组来说赋值是不合法的:
编程时不要让程序二义性,这样会让编译性不知道如何选择,更重要的是编译通过了,运行时的二义性。
答案是,0是一个int——准确地说,一个字面上的整数常量——所以,“总是”f(int)被调用。这就是问题所在:因为不是所有的人总是希望它这样执行。这是c++世界中特有的一种情况:当人们认为某个调用应该具有多义性时,编译器却不这么干。
一个最多可以计算五个int的最大值的函数。这个函数使用了——深呼一口气,看清楚啦——std::numeric_limits
据说爱因斯坦曾提出过这样的建议:尽可能地让事情简单,但不要过于简单。在c++语言中相似的说法应该是:尽可能地使程序高效,但不要过于高效。
函数参数的传递在设计时,尽可能的选择”传引用“,不要用“传值”的方式,有两个好处:1.速度快2.可以将修改后的值带回
首先,从“一致性”的角度来看这个问题。如果public接口里都是函数,用户每次访问类的成员时就用不着抓脑袋去想:是该用括号还是不该用括号呢?——用括号就是了!因为每个成员都是函数。一生中,这可以避免你多少次抓脑袋啊!
使用const的好处在于它允许指定一种语意上的约束——某种对象不能被修改——编译器具体来实施这种约束。通过const,你可以通知编译器和其他程序员某个值要保持不变。只要是这种情况,你就要明确地使用const ,因为这样做就可以借助编译器的帮助确保这种约束不被破坏。