gpt4 book ai didi

c++ - 使成员函数成为 friend

转载 作者:可可西里 更新时间:2023-11-01 18:27:40 24 4
gpt4 key购买 nike

当你让一个类的成员函数成为它自己的友元时会发生什么!?

下面的代码编译并运行。如果没有 friend 声明,则会生成“操作符的太多参数”(这是正确的)。我意识到这样做没有任何意义,但谁能告诉我这里发生了什么? friend 是否以某种方式强制编译器省略默认的 this 参数?

class Test
{
public:
friend bool operator<(Test& lhs, Test& rhs)
{
return true;
}
};

int main( int c, char** argv)
{
Test test1;
Test test2;

return test1 < test2;
}

最佳答案

不同之处在于,即使整个定义都出现在类中, friend 也不是成员;相反,函数被放置在周围的命名空间中。所以,没有 this指针。成员(member)期间operator<隐式操作 this和显式右侧参数,一个 friend需要显式提供作为函数参数的左侧和右侧参数 - 因此需要额外参数。你的friend版本相当于将函数放在类之后,除了它可以访问 private。和 protected成员和基地,隐含地 inline (虽然这并不意味着编译器必须内联它 - 这只是一个提示,但它对于单一定义规则很重要,因为你的 friend 函数可以从许多翻译单元中包含并且链接没有问题)。

关于c++ - 使成员函数成为 friend ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4363318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com