gpt4 book ai didi

c++ - 当您声明一个 friend 然后在类中定义它时,这意味着什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:18 28 4
gpt4 key购买 nike

我正在尝试理解我通过反复试验成功实现的代码片段。我了解有关此代码段的所有内容,除了为什么当我从类声明中删除“ friend ”时它不起作用。我不明白 friend 在这种情况下在做什么。


stringstream log;<p></p>

<p>class logWrapper {
friend ostream& operator<<(ostream& os, logWrapper& thislogend)
{
stringstream &ss = dynamic_cast(os);
// This line replaced with printf for clarity
// The actual code sends the C style string to a
// legacy logging system that only takes C style strings
// _log(LOG_ERR, "%s", ss.str().c_str());
printf("%s\n", ss.str().c_str());</p>

ss.str("");
return os;
}
} logend;

int main(void)
{
log << "This is a test" << logend;
}

最佳答案

您同时声明和定义了一个重载运算符的友元函数。

声明为friend 的函数可以访问与其成为好友的类的任何实例的所有私有(private)成员。

这与常规成员函数(显然也可以访问私有(private)成员)不同,因为友元函数不是类的成员——它们是独立函数。

因此,由于您已经在类内部定义了独立函数,因此乍一看会让人感到困惑——请记住,它根本不是真正的成员函数。

关于c++ - 当您声明一个 friend 然后在类中定义它时,这意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5545112/

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