[Boolan] C++第一周学习笔记
2017-01-13 15:45
169 查看
1.尽可能引用参数,尽可能inline
先说说inline,按我以前的思路来看,inline相当于直接把函数实现代码复制到函数应该执行的地方,但是会引起代码量变多,特别是一些复杂的函数,代码就会膨胀,不过按照老师的说法:实际是否真的是inline是由编译器决定的?那么正常的做法,果然还是要挑一些简单的函数加inline比较好。顺便inline是不能和函数声明放一起的,想想也是^_^
顺便截取一段深度探索c++对象模型里的话(好吧 我取得是翻译版的):每一个 non-inline member function只会产生一个函数实体,至于每一个"拥有零个或一个定义“的inline member function 则会在每一个使用者(模块)身上产生一个函数实体。
参数尽量引用,这点很容易理解,毕竟大部分情况下,传地址的速度要比整个内容都传过去要快得多。
不太熟悉的是函数的返回值什么时候返回引用的问题,查阅资料后按个人理解总结以下几点:
(1)课程示例里一个比较明显的情况是类似于a=b=c这种连续操作的问题,b=c的返回结果x必须符合a=x时操作符处理的格式。
(2)要返回引用的话,肯定不能返回局部变量的引用,因为生命期到了以后这个引用就脏了?
(3)返回引用的话,结果是一个左值。
2.const的问题
const修饰参数或者函数返回值,即表示参数/返回值是不能修改的。
另外对于类成员函数来说 f() const {} 表示这个函数不会修改类成员,这样的话,如果声明了一个const的对象,那么这个对象只能调用上述成员函数,没有加const的是没法调用的,按照老师说法,没加const,编译器会理解为:这个函数回去修改内部成员。
以前好像还听某人说过,习惯性地要把该标const的地方都好好标上:虽然大部分情况下标和不标区别不大,但是这同时也体现了作者的思路,标上const也是有利于别人阅读你的代码
3.临时变量
第一次听说原来还有临时变量……但是其生命太有限,如果想要延长的话,需要用const的引用去指向它,这么一来它的生命这周期会延长到那个引用变量的生命周期。然后问题就来了,群里的萧然提了拷贝构造函数的事,个人小白,就跟着去看相关的资料,结果左值引用,右值引用各种概念开始冒出来,看的我晕乎乎后总结如下:
(1)左值是有名字的,有作用域(生命期?)的,右值是临时的,有时候用右值引用作参数,但是因为在函数里已经有了个名字,有了生命期,所以其实它已经不是右值了,具体要用move变成右值引用,但是太迷糊了,没法继续说……
(2)临时变量可以用右值引用或者const 左值引用延长生命期,可以说c++里右值引用就是为了这种临时变量存在的?因为用const的左值引用就不能修改内容了
4.友元
是朋友的就可以直接调用内部成员,顺便同类即朋友
5.返回方是不考虑接收方的类型的
貌似T a=b 和T &a=b 一个是把内容全复制过去,一个只是地址上的赋值。
先说说inline,按我以前的思路来看,inline相当于直接把函数实现代码复制到函数应该执行的地方,但是会引起代码量变多,特别是一些复杂的函数,代码就会膨胀,不过按照老师的说法:实际是否真的是inline是由编译器决定的?那么正常的做法,果然还是要挑一些简单的函数加inline比较好。顺便inline是不能和函数声明放一起的,想想也是^_^
顺便截取一段深度探索c++对象模型里的话(好吧 我取得是翻译版的):每一个 non-inline member function只会产生一个函数实体,至于每一个"拥有零个或一个定义“的inline member function 则会在每一个使用者(模块)身上产生一个函数实体。
参数尽量引用,这点很容易理解,毕竟大部分情况下,传地址的速度要比整个内容都传过去要快得多。
不太熟悉的是函数的返回值什么时候返回引用的问题,查阅资料后按个人理解总结以下几点:
(1)课程示例里一个比较明显的情况是类似于a=b=c这种连续操作的问题,b=c的返回结果x必须符合a=x时操作符处理的格式。
(2)要返回引用的话,肯定不能返回局部变量的引用,因为生命期到了以后这个引用就脏了?
(3)返回引用的话,结果是一个左值。
2.const的问题
const修饰参数或者函数返回值,即表示参数/返回值是不能修改的。
另外对于类成员函数来说 f() const {} 表示这个函数不会修改类成员,这样的话,如果声明了一个const的对象,那么这个对象只能调用上述成员函数,没有加const的是没法调用的,按照老师说法,没加const,编译器会理解为:这个函数回去修改内部成员。
以前好像还听某人说过,习惯性地要把该标const的地方都好好标上:虽然大部分情况下标和不标区别不大,但是这同时也体现了作者的思路,标上const也是有利于别人阅读你的代码
3.临时变量
第一次听说原来还有临时变量……但是其生命太有限,如果想要延长的话,需要用const的引用去指向它,这么一来它的生命这周期会延长到那个引用变量的生命周期。然后问题就来了,群里的萧然提了拷贝构造函数的事,个人小白,就跟着去看相关的资料,结果左值引用,右值引用各种概念开始冒出来,看的我晕乎乎后总结如下:
(1)左值是有名字的,有作用域(生命期?)的,右值是临时的,有时候用右值引用作参数,但是因为在函数里已经有了个名字,有了生命期,所以其实它已经不是右值了,具体要用move变成右值引用,但是太迷糊了,没法继续说……
(2)临时变量可以用右值引用或者const 左值引用延长生命期,可以说c++里右值引用就是为了这种临时变量存在的?因为用const的左值引用就不能修改内容了
4.友元
是朋友的就可以直接调用内部成员,顺便同类即朋友
5.返回方是不考虑接收方的类型的
貌似T a=b 和T &a=b 一个是把内容全复制过去,一个只是地址上的赋值。
相关文章推荐
- [Boolan-C++学习笔记]第一周整理
- [Boolan] C++第二周学习笔记
- [Boolan]第一周学习笔记——rico风
- Boolan——C++开发工程师——C++面对对象高级编程(上)—— 第一周笔记
- Boolan c++学习第二周笔记
- [Boolan-C++学习笔记]第二周整理
- C++如何设计一个不含指针的类 (Boolan笔记第一周)
- C++ ->操作符重载的思考 (Boolan学习笔记第八周)
- boolan——c++学习笔记之设计模式一
- BoolanC++第一周笔记
- boolan——c++学习笔记1
- boolan——c++学习笔记之容器
- [Boolan] C++第五周学习笔记
- boolan——c++学习笔记之STL哈希表探究
- ## c++学习笔记 --基础篇(第一周)##
- C++ 开发工程师 第一周笔记 boolan.com
- [Boolan] C++第四周学习笔记
- [Boolan] C++第六周学习笔记
- Boolan-C++开发工程师-泛型编程-第一周笔记
- Boolan* C++课程第一周笔记