gpt4 book ai didi

c++ - 关于运算符重载的问题

转载 作者:太空狗 更新时间:2023-10-29 20:06:59 26 4
gpt4 key购买 nike

我试图理解一个程序,其中包含函数 f 的以下定义

void f(String S, const String& r)
{

}

这里参数中的String代表一个类。我对这两个参数的定义之间的区别感到困惑:“String S”和“const String& r”。 S应该代表一个String类的对象,那么r呢?

更详细地说,f 定义为

void f(String S, const String& r)
{
int c1 = S[1]; // c1=s.operator[](1).operator char( )
s[1] ='c'; // s.operator[](1).operator=('c')

int c2 = r[1]; // c2 = r.operator[](1)
r[1] = 'd'; // error: assignment to char, r.operator[](1) = 'd'
}

这段代码是为了展示运算符是如何重载的,但是这些注释对我帮助不大。例如,为什么 r[1]='d' 也不正确?感谢您帮助理解它。

最佳答案

const String& r 是对 String r 的常量引用。在该函数中,您可以像访问字符串一样访问 r。不同之处在于它实际上是对传递给函数的对象的引用,而 S 将是传递给函数的对象的拷贝。您可以几乎将它想象成您正在通过取消引用的指针访问 r(尽管它不仅限于此)。

另一种看待它的方式:调用者将看到对 r 的更改(如果它不是 const),而他不会看到对 的更改S.

const 只是意味着函数f 不能修改r

另请参阅:https://isocpp.org/wiki/faq/references#overview-refs

关于c++ - 关于运算符重载的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5215574/

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