【问题标题】:How to differentiate (when overloading) between prefix and postfix forms of operator++? (C++)如何区分(重载时)运算符++的前缀和后缀形式? (C++)
【发布时间】:2009-05-21 19:55:12
【问题描述】:

因为我已经为迭代器类重载了 operator++

template<typename T>
typename list<T>::iterator& list<T>::iterator::operator++()
{
    //stuff
}

但是当我尝试这样做时

list<int>::iterator IT;
IT++;

我收到关于没有 postifx ++ 的警告,使用前缀形式。如何专门重载前缀/postifx 表单?

【问题讨论】:

    标签: c++ operator-overloading postfix-operator prefix-operator


    【解决方案1】:

    http://www.devx.com/tips/Tip/12515

    class Date {
        //...
        public:
        Date& operator++(); //prefix
        Date& operator--(); //prefix
        Date operator++(int unused); //postfix
        Date operator--(int unused); //postfix
    };
    

    【讨论】:

    • 后缀运算符应该按值返回,而不是引用。我想可能会有一些非常奇怪的情况,他们可以返回一个引用,但是要怎么做呢?不是这个,因为它已经增加了……
    【解决方案2】:

    编写相同运算符重载的一个版本,但给它一个int 类型的参数。您无需对该参数的值进行任何操作。

    如果您对这种语法是如何产生的历史感兴趣,there's a snippet of it here

    【讨论】:

      【解决方案3】:

      后缀在签名中有一个 int 参数。

      Class& operator++();    //Prefix 
      Class  operator++(int); //Postfix 
      

      【讨论】:

        【解决方案4】:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-05
          • 2016-03-29
          • 2022-11-24
          • 2015-07-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多