More Effective C++ - 章节二 : 操作符(operators)
5. 对定制的 "类型转换函数" 保持警觉
允许编译器执行隐式类型转换,害处多过好处,不要提供转换函数,除非你确定需要。
class foo
{
foo(int a = 0, int b = 1);
operator double() const;
...
};
foo test(1, 2);
double d = 0.5 * test; // 编译器会调用double进行隐式转换
上述类型隐式转换可能导致错误(非预期)的函数被调用。解决方法 1.类似于C++ string 一样,添加一个函数专门做转换,类似string的c_str()转换string为const char* .
```
class foo
{
foo(int a = 0, int b = 1);
double asDouble() const; // 添加一个成员函数做转换
...
};
```
2.使用 explicit 关键字 .
3.使用代理对象,也就是类中再加一个代理类做.
6. 区别 increment/decrement 操作符的前置(prefix)和后置(postfix)形式
看一下前置和后置重载例子:
class foo{
public:
foo& operator++();
const foo operator++(int);
foo& operator--();
const foo operator--(int);
};
为了防止 "i++++" 情况出现,后置式返回了一个const对象。 因此,正常情况下我们应该使用前置式,直接返回引用,而不是临时拷贝对象,效率会更高。
7. 千万不要重载&&,||和, 操作符
8. 了解各种不同意义的new和delete
new的主要介绍如下:
// 1.首先分配内存 2.执行构造函数
string *ps = new string("Memory Management");
// 分配内存
void* operator new(size_t size);
// 在 buffer 内存处构建foo对象
new (buffer) foo(int i);
2018年10月1日15:59:02
More Effective C++ - 章节二 : 操作符(operators)的更多相关文章
- effective c++ (二)
条款04:确定对象使用前已先被初始化 1.由于 c part of c++而且初始化可能导致运行期成本,那么就不保证发生初始化:例如arry是c part of c++的部分从而不能保证初始化,而ST ...
- Effective C++ 笔记二 构造/析构/赋值运算
条款05:了解C++默默编写并调用哪些函数 编译器默认声明一个default构造函数.一个copy构造函数.一个copy assignment操作符和一个析构函数.这些函数都是public且inlin ...
- 章节二、2-String 引用数据类型-字符串类
一.创建String(字符串对象)的两种方式 1.String str1 = "nihao"("nihao"值存储在常量值中) 2.String str2 = ...
- 章节二、1-java概述-数据类型
一.数据类型 1.基本数据类型 a.数值型 1.整数:byte(1个字节=8位) min:-128 max:127 default:0 .short(2个字节=16位) min:-32768 max: ...
- Rxjava学习(二操作符)
操作符是为了解决对Observable对象的变换的问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件 1.filter filter()操作符是可 ...
- Effective C++笔记(二):构造/析构/赋值运算
参考:http://www.cnblogs.com/ronny/p/3740926.html 条款05:了解C++默默编写并调用哪些函数 如果自定义一个空类的话,会自动生成默认构造函数.拷贝构造函数. ...
- Effective C++ 条款二 用编译器替换预编译器
/************************************************************************/ /* C++条款二:用编译器替换预编译器 */ / ...
- More Effective C++ - 章节一 : 基础议题
1. 仔细区分 pointers 和 references references和pointers的差别描述如下: pointer:当需要考虑"不指向任何对象"时,或者是考虑&qu ...
- flask-admin章节二:wtforms的使用以及在数据库场景中使用QuerySelectField代替SelectField
概述 flask admin可以支持自定义视图,对于涉及到比较复杂的视图可以选择继承flask_admin.BaseView来定义自己期待的结构. 自定义的视图的每个函数可以使用flask_admin ...
随机推荐
- 探究final在java中的作用
目录 一. final修饰变量 1. 基础: final修饰基本数据类型变量和引用数据类型变量. 2. 进阶: 被final修饰的常量在编译阶段会被放入常量池中 3. 探索: 为什么局部/匿名内部类在 ...
- 【Nginx】解决Post请求变Get的问题
默认情况下Nginx会把post请求做一次重定向操作,然后后端收到的就成了Get请求,还会导致一些参数的遗漏. 日志如下: 172.16.1.108 - - [11/Jan/2019:18:27:09 ...
- Apache Kylin 是什么?
Apache Kylin的官网 http://kylin.apache.org/cn/ - 可扩展超快OLAP引擎: Kylin是为减少在Hadoop上百亿规模数据查询延迟而设计 - Hadoop ...
- 修改static控件背景颜色和文字颜色
当 static 控件或具有 ES_READONLY 风格的 edit 控件被绘制时,会向父窗口发送 WM_CTLCOLORSTATIC 消息.如果我们在窗口过程中处理该消息,就必须返回一个画刷句柄, ...
- UWP 动画
一:StoryBoard 一般翻译成演示图版或者故事板,就像电影中的情节串联板,它是一个动画时间线的容器. 二:动画的分类 简单动画:以Animation结尾,例如DoubleAnimat ...
- 洛谷P2502[HAOI2006]旅行
题目: Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N个景点(编号为1,2,3,-,N),这些景点被M条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路.也许 ...
- 树状数组 POJ 2481 Cows
题目传送门 #include <cstdio> #include <cstring> #include <algorithm> using namespace st ...
- Eclipse的ant调用maven
需要在 eclipse 的 windows - preferences - ant - runtime - classpath - global entries 加入 eclipse 里面的 jsch ...
- Hadoop体系结构管理
一.查看Zookeeper信息 [hadoop@weekend01 ~]$zkServer.sh status JMX enabled by default Using config: /hadoop ...
- RAID 0、1、5、1+0总结
RAID(Redundant Array Of Independent Disk,独立磁盘冗余阵列),可以提供比普通磁盘更快的速度.更高的安全性,生产环境中服务器在安装时一般都会做RAID,RAID的 ...