1

我有一个关于使用return *thisC++ 中的语句进行级联的问题。我正在阅读一本教科书,并且遇到了我不完全理解的级联用法。

以下代码是我自己的构造:

#include <iostream>
using namespace std;

class Time
  {
  public:
     Time( int = 0, int = 0 ); 
     Time & setHour( int );                 
     void print( void );
     Time & operator+=( int ); // Line in Question 

  private:
     int hour; 
     int minute; 
  };

  Time::Time(int hr, int mn)
  {
     hour = hr;
     minute = mn;
  }

  Time & Time::operator+=(int increment) // Line in Question
  {
    hour += increment;
    return *this;
  }

  Time & Time::setHour(int h)
  {
    hour = h;
    return *this;
  }

  void Time::print( void )
  {
     cout << "hour = " << hour << endl;
     cout << "minute = " << minute << endl;
  }

int main()
{
   cout << "Hello, world!" << endl;
   Time t;
   (t+=3)+=4;
   t.print();
   int x = 4;
   (x+=4)+=5;
   cout << x << endl;
}

请注意,+=运算符可以“级联”,就像我使用整数变量“级联”一样x。我正在阅读的文本似乎表明有问题的两行标有注释// Line in Question应该const在时间前面有关键字。也就是说,函数返回对 Time 对象常量的引用。我不明白为什么这是真的(或者这是有意义的情况),因为我们正在修改 Date 的数据成员。

const在行首标记关键字的目的是// Line in Question什么?

谢谢。

4

1 回答 1

1

在标记为 // Line in Question 的行开头使用关键字 const 的目的是什么?

从返回的const引用operator +=将具有防止您在函数中使用的那种级联的效果main(),例如:

(t+=3)+=4;

这将被阻止,因为t+=3将返回对Time对象的常量引用,并且由于operator +=它本身没有限定为,因此在尝试应用于由返回的引用时const会出现编译错误目的)。+= 4constt+=3constconst

我希望这本书的作者能够评论防止这种情况发生的原因。我个人不明白为什么它在这里有害。

于 2013-02-15T00:35:10.503 回答