Questions tagged «friend-function»

2
运算符重载:成员函数与非成员函数?
我读到一个声明为成员函数的重载运算符是不对称的,因为它只能有一个参数,而另一个自动传递的参数是this指针。因此,没有标准可以比较它们。另一方面,声明为a的重载运算符friend是对称的,因为我们传递了相同类型的两个参数,因此可以对其进行比较。 我的问题是,当我仍然可以将指针的左值与引用进行比较时,为什么首选朋友?(使用非对称版本可获得与对称相同的结果)为什么STL算法仅使用对称版本?

1
回顾C ++编译时间计数器
TL; DR 在尝试阅读整篇文章之前,请了解: 我自己已经找到解决所提出问题的方法,但是我仍然很想知道分析是否正确; 我已经将解决​​方案打包到一个fameta::counter类中,该类可以解决一些剩余的怪癖。您可以在github上找到它; 您可以在使用Godbolt上看到它。 一切如何开始 自从FilipRoséen在2015年发现/发明以来,编译计时器的黑魔法就用C ++了,我一直对这个设备有些痴迷,所以当CWG 决定必须取消功能时,我很失望,但仍然希望他们的想法通过向他们展示一些引人注目的用例可以对其进行更改。 然后,几年前,我决定再次研究一下问题,以便将uberswitch es嵌套(在我看来,这是一个有趣的用例),只是发现它不再适用于新版本的。可用的编译器,即使问题2118处于(并且仍然)处于打开状态:代码可以编译,但计数器不会增加。 在Roséen的网站上已经报告了该问题,最近在stackoverflow上也报告了该问题:C ++是否支持编译时计数器? 几天前,我决定再次尝试解决问题 我想了解编译器中发生了什么变化,这些变化使看似仍然有效的C ++不再起作用。为此,我在互联网上进行了广泛的搜索,寻找有人对此进行讨论,但无济于事。因此,我开始进行实验并得出一些结论,我在这里提出的想法是希望从这里得到比我自己更了解的反馈。 为了清楚起见,下面我将介绍Roséen的原始代码。有关其工作原理的说明,请访问他的网站: template<int N> struct flag { friend constexpr int adl_flag (flag<N>); }; template<int N> struct writer { friend constexpr int adl_flag (flag<N>) { return N; } static constexpr int value = N; }; …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.