我在实现++ increment运算符时遇到问题

时间:2015-02-18 20:00:30

标签: c++ operator-overloading

我正在尝试为刚刚完成的c库提供c ++接口,我希望它可以编写

for (DBITable table = db.tables() ; table != NULL ; table++)

其中db是一个带有tables()方法的类,它返回与之关联的DBITable

编译时,clang++出现以下错误

error: cannot increment value of type 'DBITable'
for (DBITable table = db.tables() ; table != NULL ; table++)
                                                    ~~~~~^

这就是我实现++运算符重载方法的方法

DBITable
DBITable::operator++()
{
    return next();
}

并且它在DBITable类中声明为

public:
    DBITable operator++();

table != NULL部分正如我所期望的那样工作

bool operator!=(void *) 
{
    // evaluate and get the value
    return value;
}

1 个答案:

答案 0 :(得分:10)

operator++()是前缀增量运算符。将后缀运算符实现为operator++(int)

规范实现让前缀运算符返回引用,后缀运算符返回值。此外,您通常会根据前缀运算符实现后缀运算符,以避免意外和维护。例如:

struct T
{
 T& operator++()
 {
  this->increment();
  return *this;
 }

 T operator++(int)
 {
   T ret = *this;
   this->operator++();
   return ret;
 }
};

Increment/decrement operators at cppreference.