关于运算符重载的问题

发布于 2024-10-20 08:33:31 字数 592 浏览 1 评论 0原文

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

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

}

这里参数中的字符串代表一个类。我对这两个参数的定义之间的差异感到困惑:“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' 不正确?感谢您帮助理解它。

I am trying to understand a program, which includes the following definition for a function f

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

}

Here String in the argument stands for a class. I am confused on the difference between the definitions of these two arguments: "String S" and "const String& r". S should represent an object of class String, then how about r?

In more detail, the f is defined as

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'      
 }

This code snippet is to show how the operator overload, but these comments does not help me much. For instance, why r[1]='d' is nor correct? Thanks for helping understanding it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月下凄凉 2024-10-27 08:33:31

const String& r 是对字符串 r 的常量引用。在函数中,您可以像访问字符串一样访问 r。不同之处在于,它实际上是对传递给函数的对象的引用,而 S 将是传递给函数的对象的副本。您几乎可以将其视为通过取消引用的指针访问r(尽管还有更多内容)。

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

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

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

const String& r is a constant reference to String r. Within the function, you access r just like a String. The difference is that it is actually a reference to the object passed to the function, while S will be a copy of the object passed to the function. You can almost think of it as if you are accessing r through a de-referenced pointer (though there is more to it than that).

Another way to look at it: The caller will see changes to r (if it wasn't const), while he will not see changes to S.

The const simply means the function f cannot modify r.

See also: https://isocpp.org/wiki/faq/references#overview-refs

靑春怀旧 2024-10-27 08:33:31

这似乎只是一个例子,来展示传递参数的方式之间的差异。

您可能会按值传递一个参数的一种实际情况是您无论如何都需要该值的副本。也许在连接两个字符串时。

This seems to be just an example, to show the difference between ways of passing parameters.

One real case where you might pass one parameter by value, is when you need a copy of the value anyway. Perhaps when concatenating the two strings.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文