注意一下,c++的底层编译器而言,引用类型往往都是由指针来实现出来的,所以pass-by-reference实际意义上往往是传递了一个指针,这对于c++的内置类型来说往往传递一个reference更加昂贵一点.但是这不能成为对所有的小对象不使用pass-by-reference的理由. 小结: 1. 尽量用pass-by-reference-to-const来代替pass-by-value,这样做不仅效率上更高,而且还可以避免切割问题 2. 这些规则不适用与内置类型.STL的迭代器还有函数对象,…
继承标准STL的函数对象 1: struct PopLess : public atd::binary_function<state,state,bool> 2: { 3: bool operator() { const State &a, const State &b } const 4: { 5: return popless(a,b); 6: } 7: } 作者的解释: 首先popless是一个函数对象,他重载了函数调用操作符,因此可以用普通函数的调用语法.当然也可以实例…
条款20 协助编译器实现返回值优化 当重载运算符的时候,比如+ - * / 这类运算符,该函数返回的值一定是个右值(即不能是引用),那么执行一次运算的开销可能会在临时对象上调用多次构造函数和析构函数,这笔开销还是很大的.现在的新编译器已经可以对这种情况进行优化了,甚至优化到连开销都没有,只是有一定的适用范围.如果可以返回一个匿名的临时对象,并且利用构造函数来得到结果对象,那么就有可能被优化到零开销.注意,有名字的对象意味着返回值优化不可用. 假设有如下的代码: node a(); node b(…
条款20 宁以pass-by-reference-to-const替换pass-by-value 记住: ★尽量以pass-by-reference-to-const替换pass-by-value.前者通常高效,并可避免切割问题 ★以上规则并不适用于内置类型,以及STL的迭代器和函数对象.那些应用pass-by-value 条款21 必须返回对象时,别妄想返回其reference 记住: ★绝不要返回pointer或reference指向一个local stack对象(如函数里的局部对象):或返…
本条款的要点: 1.尽量以pass-by-reference-to-const替换pass-by-value.前者更高效且可以避免切割问题. 2.这条规则并不适用于内建类型及STL中的迭代器和函数对象类型.对于它们,pass-by-value通常更合适. 缺省的情况下,C++以by-value方式传递对象至函数,或者获取函数的对象返回值.除非你另外的指定,否则函数参数都是以实际实参的副本为初值,而调用端所获得的也是函数返回值的一个副本.这些副本都是有对象的copy构造函数得到的.这可能使得pas…
Intent 传递对象通常有两种实现方式,Serializable 和 Parcelable: 一.Serializable:序列化,表示将一个对象转换成可存储或可传输的状态,序列化后的对象可以在网络上进行传输,也可以存储到本地.这里实现了 Serializable 接口的类就可以通过 Intent 传递了: --发起方传递对象:调用 Intent 的 putExtra() 即可: Person person = new Person(); person.setName("Tom");…
原文网址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1211/694.html Android中Bundle类的作用 Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值.相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt(),putXxx()用于往Bundle对象放入数据,getX…
Intent 的用法相信你已经比较熟悉了,我们可以借助它来启动活动.发送广播.启动服务等.在进行上述操作的时候,我们还可以在Intent 中添加一些附加数据,以达到传值的效果,比如在FirstActivity 中添加如下代码: Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("string_data", "hello"); intent.put…
参考自<第一行代码>——郭霖 Intent的用法相信你已经比较熟悉了,我们可以借助它来启动活动.发送广播.启动服务等.在进行上述操作的时候,我们还可以在Intent中添加一些附加数据,以达到传值的效果,比如在FirstActivity中添加如下代码: Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("string_data", "hello&…
Bundle可以传递对象,message又可以传递Bundle于是就可以利用buddle作为中间载体传递对象了 Message msg = Message.obtain();  Bundle b = new Bundle(); b.putParcelable("MyObject", (Parcelable) object); msg.setData(b);  handler.sendMessage(msg); public void handleMessage(Message msg)…