标签(空格分隔): C++Primer 学习记录 运算符重载 类型转换
// 错误,不能为 int重定义内置的运算符 int operator+(int, int);
data1 + data2;
operator+(data1, data2);
data1.operator+=(data2);
10 24.95 0-210-999
这样的输入时,上面的代码在执行时不会出错,但内部逻辑已经跑偏了。
<
定义,则应该考虑为这个类定义 <
运算符。如果类同时还包含==
,则如果两个对象是!=
的,那么一个对象应该<
另外一个。如果不满足这个条件,那么这个类也许不定义<
运算符会更好。
StrBlobPtr& operator++(); // 前置
StrBlobPtr& operator++(int); // 后置
StrBlobPtr p(a1); p.operator++(0); // 后置递增 p.operator++(); // 前置递增
int(int, int)
,下面几个不同类型的可调用对象都对应着这个调用形式。
// 普通函数 int add(int i, int j) { return i + j; } lambda,其产生一个未命名的函数对象类 auto mod = [](int i, int j) { return i % j; }; // 函数对象类 struct divide { int operator()(int denominator, int divisor) { return denominator / divisor; };