概述
1、i++跟++i
(1)单独执行后,i的值都增加了1
(2)i++不可以做左值,++i可以
<1>左值:C/C++语言中可以放在赋值符号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量。
<2>具体函数实现:
// 前缀形式:
int& int::operator++() //这里返回的是一个引用形式,就是说函数返回值也可以作为一个左值使用{//函数本身无参,意味着是在自身空间内增加1的
*this += 1; // 增加
return *this; // 取回值
}
//后缀形式:
const int int::operator++(int) //函数返回值是一个非左值型的,与前缀形式的差别所在。
{//函数带参,说明有另外的空间开辟
int oldValue = *this; // 取回值
++(*this); // 增加
return oldValue; // 返回被取回的值
}
2、C++ 的一个常见面试题是让你实现一个 String 类,限于时间,不可能要求具备 std::string 的功能,但至少要求能正确管理资源。
此题转载至:http://coolshell.cn/articles/10478.html
首先选择数据成员,最简单的 String 只有一个 char* 成员变量。
好处是容易实现,坏处是某些操作的复杂度较高(例如 size() 会是线性时间)。
为了面试时写代码不出错,本文设计的 String 只有一个 char* data_成员。
而且规定 invariant 如下:一个 valid 的 string 对象的 data_ 保证不为 NULL,data_ 以 '