友元运算符行为(常量与非常量)

发布于 2024-12-06 17:22:39 字数 941 浏览 0 评论 0原文

我有以下 C++ 代码:

#include <iostream>

template <class T>
void assign(T& t1, T& t2) {
   std::cout << "First method" << std::endl;
   t1 = t2;
}

template <class T>
void assign(T& t1, const T& t2) {
   std::cout << "Second method" << std::endl;
   t1 = t2;
}

class A {
   public:
      A(int a) : _a(a) {};
   private:
      int _a;
      friend A operator+(const A& l, const A& r);
};

A operator+(const A& l, const A& r) {
   return A(l._a + r._a);
}

int main() {
  A a = 1;
  const A b = 2;

  assign(a, a);
  assign(a, b);
  assign(a, a+b);
}

输出为:

First method
Second method
Second method

即使我注释掉 main 函数中的前 2 个 assign,输出也保持不变。

有人可以向我解释一下为什么 operator+ 返回一个 const A 吗?

Linux Debian 64 位和 Windows 7 64 位中的输出是相同的。

I have the following C++ code:

#include <iostream>

template <class T>
void assign(T& t1, T& t2) {
   std::cout << "First method" << std::endl;
   t1 = t2;
}

template <class T>
void assign(T& t1, const T& t2) {
   std::cout << "Second method" << std::endl;
   t1 = t2;
}

class A {
   public:
      A(int a) : _a(a) {};
   private:
      int _a;
      friend A operator+(const A& l, const A& r);
};

A operator+(const A& l, const A& r) {
   return A(l._a + r._a);
}

int main() {
  A a = 1;
  const A b = 2;

  assign(a, a);
  assign(a, b);
  assign(a, a+b);
}

The output is:

First method
Second method
Second method

The output stays the same even if I comment out the the first 2 assigns in the main function.

Can someone please explain to me why the operator+ returns a const A?

The output is the same in both Linux Debian 64bit and Windows 7 64 bit.

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

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

发布评论

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

评论(1

相对绾红妆 2024-12-13 17:22:39

它根本不返回 const A。它返回一个临时 A,它只能绑定到 const 引用。

It doesn't return a const A at all. It returns a temporary A, which may only bind to a const reference.

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