首先说一下++重载符,++分为前后两种方式的调用。因此就有了两种的符号的调用。大致如下(对于后置++的做法采用了不严谨的重载,返回的应该是 const对象)
namespace class_cplusplus10 { class CBase { public: CBase& operator++() //这里是前置++调用 { printf(_T("class_cplusplus10::CBase& operator++()\n")); return *this; } CBase& operator++(int) //这里是后置++调用 { printf(_T("class_cplusplus10::CBase& operator++(int)\n")); return *this; } CBase& operator--() { printf(_T("class_cplusplus10::CBase& operator--()\n")); return *this; } CBase& operator--(int) { printf(_T("class_cplusplus10::CBase& operator--(int)\n")); return *this; } }; }
上面的代码已经很好的说明了哪一些是前置调用重载,哪一些是后置调用的重载。
然后通过这些函数可以来看看一些哗众取宠的笔试题。
class_cplusplus10::CBase base; ++base++;
问++base++的调用是怎样的,通过调试发现,实际上后置++是先被调用,然后前置++。
不过这里是c++,而这种笔试题往往考的是操作符的优先级。也许一个对象和一个内置类型的变量存在一些不同