use*_*983 3 c++ operator-overloading
我试图理解一个程序,其中包括函数f的以下定义
void f(String S, const String& r)
{
}
Run Code Online (Sandbox Code Playgroud)
这里参数中的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'
}
Run Code Online (Sandbox Code Playgroud)
这段代码片段用于显示运算符如何重载,但这些注释对我没什么帮助.例如,为什么r [1] ='d'是正确的?感谢您帮助理解它.
const String& r
是String r的常量引用.在函数中,您可以r
像String一样访问.不同之处在于它实际上是对传递给函数的对象的引用,而S
将是传递给函数的对象的副本.您几乎可以将其视为r
通过取消引用的指针进行访问(尽管它有更多内容).
查看它的另一种方法:调用者将看到更改r
(如果不是const
),而他将看不到更改S
.
在const
仅仅意味着该函数f
不能修改r
.
另见:https://isocpp.org/wiki/faq/references#overview-refs
归档时间: |
|
查看次数: |
131 次 |
最近记录: |