C++ 什么';在结构中使用友元函数是什么意思?

C++ 什么';在结构中使用友元函数是什么意思?,c++,c++11,struct,friend,C++,C++11,Struct,Friend,我正在重载插入运算符(事实上,该运算符可以在命名空间范围内定义,而无需friend 在这种情况下,你不需要“需要”让它成为你的朋友,因为你给出的理由完全一样,所以你不清楚你在哪里听说过你这样做 struct Address { string street; string cross; int suite; }; inline ostream& operator<<(ostream& oss, const Address& other) {

我正在重载插入运算符(事实上,该运算符可以在命名空间范围内定义,而无需
friend

在这种情况下,你不需要“需要”让它成为你的朋友,因为你给出的理由完全一样,所以你不清楚你在哪里听说过你这样做

struct Address
{
   string street;
   string cross;
   int suite;
};

inline ostream& operator<<(ostream& oss, const Address& other)
{
   oss << "street: " << other.street << "cross: " << other.cross << "suite: " << other.suite;
   return oss;
}
结构地址 { 弦街;; 弦交叉; 国际套房; };
内联ostream&operator实际上,可以在命名空间范围内定义该运算符,而无需
friend

在这种情况下,你不需要“需要”让它成为你的朋友,因为你给出的理由完全一样,所以你不清楚你在哪里听说过你这样做

struct Address
{
   string street;
   string cross;
   int suite;
};

inline ostream& operator<<(ostream& oss, const Address& other)
{
   oss << "street: " << other.street << "cross: " << other.cross << "suite: " << other.suite;
   return oss;
}
结构地址 { 弦街;; 弦交叉; 国际套房; };

内联ostream&operator1)“但是,由于在结构中所有成员都是公共的”,因此在
struct
中可以有
private
成员。2) 是的,在这种情况下,不需要具有作为
朋友的功能。@AlgirdasPreidžius请在回答部分回答,而不是在这里CPPCON 2018:Dan Saks“结交新朋友”@Lightness Racesinorbit我的评论是,这不是一个体面的回答。体面的回答需要更好的格式,而不是那么简短。我现在懒得用这些方法来改进它。@AlgirdasPreidžius你不必发布答案,所以如果你认为你写不出完整的答案,你可以什么也不发布!但把它放在这里并不是解决这个问题的方法。谢谢1)“但是,因为在结构中所有成员都是公共的”,所以在
结构中可以有
private
成员。2) 是的,在这种情况下,不需要具有作为
朋友的功能。@AlgirdasPreidžius请在回答部分回答,而不是在这里CPPCON 2018:Dan Saks“结交新朋友”@Lightness Racesinorbit我的评论是,这不是一个体面的回答。体面的回答需要更好的格式,而不是那么简短。我现在懒得用这些方法来改进它。@AlgirdasPreidžius你不必发布答案,所以如果你认为你写不出完整的答案,你可以什么也不发布!但把它放在这里并不是解决这个问题的方法。这意味着C++中结构和类之间唯一的区别是默认情况下,类中的所有成员都是私有的,而结构中的所有成员都是公共的。Yes@ShubhamUrkade实际上,C++中没有“结构”这个概念;关键字
struct
为您提供了一个类。但距离足够近。内联友元函数只能通过Koenig查找找到。人们可能有实际的理由这样做。也许可以在其他地方防止名称冲突?我想不出一个现成的例子。关键是,我不确定说这总是关于样式的说法是否正确。@ShubhamUrkade非内联函数(使用的)必须在一个翻译单元中定义(根据一个定义规则)。头文件通常包含在多个翻译单元中,因此在头文件中定义非内联函数通常是不合适的。当函数在类定义中定义时(如您所做的),它是隐式内联的。当在名称空间范围中定义函数时(如本答案所示),该函数是隐式非内联的。因此,这里需要显式内联声明。这是否意味着C++中结构和类之间唯一的区别是默认情况下,类中的所有成员都是私有的,而结构中的所有成员都是公共的?Yes@ShubhamUrkade实际上,C++中没有“结构”这个概念;关键字
struct
为您提供了一个类。但距离足够近。内联友元函数只能通过Koenig查找找到。人们可能有实际的理由这样做。也许可以在其他地方防止名称冲突?我想不出一个现成的例子。关键是,我不确定说这总是关于样式的说法是否正确。@ShubhamUrkade非内联函数(使用的)必须在一个翻译单元中定义(根据一个定义规则)。头文件通常包含在多个翻译单元中,因此在头文件中定义非内联函数通常是不合适的。当函数在类定义中定义时(如您所做的),它是隐式内联的。当在名称空间范围中定义函数时(如本答案所示),该函数是隐式非内联的。因此,这里需要显式内联声明。