我想知道在Fortran中是否存在与C ++相关的" friend函数"类似的东西。我希望能够在不创建新对象的情况下使运算符重载,因为它太昂贵了。我已经尝试在模块中创建对象并尝试让重载的运算符返回它,但它没有成功。
答案 0 :(得分:1)
您对friend
在C ++中的含义的理解是不正确的。这涉及友元函数内私有类成员的可访问性 - 而不是将对象创建作为运算符重载的一部分。 Fortran的可访问性模型是不同的 - 在类型相同的模块中定义的任何过程都是“朋友”,并且在可访问性方面没有任何与成员函数等效的内容。
两种语言中表达式求值的语义都要求运算符的源实现创建一个新对象来存储操作的结果。在某些情况下,花哨的编译器优化可能会阻止实际创建临时函数结果,但这在很大程度上取决于细节。