149得票2回答
运算符重载:成员函数 vs 非成员函数?

我读到过,将重载运算符声明为成员函数是不对称的,因为它只能有一个参数,而自动传递的其他参数是this指针。因此,不存在标准来比较它们。另一方面,作为friend声明的重载运算符是对称的,因为我们传递了两个相同类型的参数,因此它们可以进行比较。 我的问题是,当我仍然可以将指针的lvalue与引...

83得票15回答
你在什么情况下会使用友元函数而不是静态成员函数?

当我们希望一个非成员函数访问类的私有成员时,我们将其声明为该类的友元函数。这使得它具有与静态成员函数相同的访问权限。无论哪种方式,你都可以获得一个与该类的任何实例都没有关联的函数。 什么情况下必须使用友元函数? 何时必须使用静态函数? 如果两者都可以解决问题,如何权衡它们的适用性?默认情况下...

41得票1回答
如何使std::make_unique成为我的类的友元

我希望声明std::make_unique函数为我的类的友元。原因是我想将我的构造函数声明为protected并提供使用unique_ptr创建对象的替代方法。以下是示例代码: #include <memory> template <typename T> clas...

41得票1回答
C++编译时计数器,重新审视

TL;DR 在阅读整篇文章之前,需要知道: 我已经找到了解决方案自己发现的,但我仍然渴望知道分析是否正确; 我将解决方案打包成了一个fameta::counter类,可以解决一些剩余的问题。你可以在github上找到它; 你可以在godbolt上使用它。 一切是如何开始的 自从Fi...

33得票4回答
C++错误C2662:无法将“this”指针从“const Type”转换为“Type&”

我试图重载C++的运算符==,但是出现了一些错误... Error C2662:“CombatEvent::getType”:无法将“this”指针从“const CombatEvent”转换为“CombatEvent&”。 这个错误出现在这一行:if (lhs.getType()...

31得票2回答
声明命名空间为类的友元

我想知道是否有一种方法可以在特定命名空间中定义的所有函数都与类成为朋友?具体而言,我有一个类,例如:class C { private: // ... public: // ... friend C* B::f1(C*); ...

19得票3回答
指向独立函数和友元函数的指针之间的区别

我不明白为什么下面的代码无法编译(例如在gcc 9.10或MS VS C++ 2019中):class X { public: friend bool operator==(int, X const &); }; int main() { 2 == X(); // ...

17得票4回答
C++中运算符重载中的友元函数和成员函数有何区别?

之前我学习了在C++中使用成员函数以及友元函数来重载运算符。虽然我知道如何使用这两种技术来重载运算符,但我仍然困惑于哪一种方法更好?是成员函数还是友元函数来重载运算符?我应该使用哪一个,为什么?请指导我!您的回复将不胜感激。我将对您的答案感到高兴和感激。

15得票2回答
A<T>的朋友也可以是A<A<T>>的朋友吗?

请看以下代码: 考虑以下代码: #include &lt;vector&gt; template&lt;typename T&gt; class Container; template&lt;typename T&gt; Container&lt;Container&lt;T&gt;&g...

14得票5回答
C++中的友元函数

我有一个关于C++中友元函数的疑问。友元函数不是类的成员函数,可以直接从主函数中调用。那么,如果我们将friend函数放在class的private或public部分,会有什么区别呢?我通常观察到friend函数总是在公共部分。在什么情况下我们应该将friend函数放在private部分。