gpt4 book ai didi

c++ - 与 *this 级联,返回对类常量的引用

转载 作者:太空宇宙 更新时间:2023-11-04 11:59:07 24 4
gpt4 key购买 nike

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

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

#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 应该在 Time 前面有关键字 const。也就是说,函数返回对 Time 对象常量的引用。我不明白为什么这是真的(或者这是有意义的情况),因为我们正在修改 Date 的数据成员。

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

谢谢。

最佳答案

What would be the purpose of having the keyword const in the beginning of the lines marked // Line in Question ?

operator += 返回一个 const 引用将具有防止您在 中使用的级联类型的效果main() 函数,如:

(t+=3)+=4;

这将被阻止,因为 t+=3 将返回一个对 Time 对象的常量引用,并且因为 operator += 不是它本身限定为 const,当您尝试将 += 4 应用于 t+=3 返回的 const 引用时会出现编译错误(您不能在非 const 对象上调用 const 成员函数)。

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

关于c++ - 与 *this 级联,返回对类常量的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14886549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com