const T T::operator++(int)
{
T tmp = *this;
++(*this);
return tmp;
}
让我们考虑这种后缀递增运算符的实现变体。为什么需要准确返回const T而不是返回T?此选项是为 type 实现的int,但我是否需要以相同的方式为我的自定义类型实现此运算符?
我坚持了一个潜规则,在开发类(类型)时,如果不清楚(或尚未制定)所需的行为,那么你应该组织提供的行为int。int返回const int。我也需要吗?
不必将返回类型设为常量以避免双重递增
++++。只为左值对象声明增量运算符就足够了(添加&到签名中):后缀增量运算符(减量运算符类似)返回
const T以防止可能不正确地使用某些构造,如 双后缀 inc-/递减形式i++++.由于这个操作符的实现,返回的是对象过去的值,所以第二次调用操作符
operator++(int)会改变第一次操作符返回的原始对象的副本的值,而不是结果,考虑到第一个增量。通常,客户端代码通常不需要(一般来说,不应该)支持两次应用后缀运算符并在一条指令中同时更改后缀运算符返回的值这样的构造,因此禁止这样的操作
const T是很有道理。这绝对有助于避免错误。const T由于该功能,它禁止非常量操作,特别是移动(移动语义)。