Fortran 中的运算符重载而不创建对象,例如友元函数 (C++)
Operator overloading in Fortran with no object creation such as in friend functions (C++)
我想知道在 Fortran 中是否有类似于来自 C++ 的 "friend function" 的东西。我希望能够在不创建新对象的情况下使运算符重载,因为它太昂贵了。我已经尝试在模块中创建对象并尝试使重载运算符 return 它,但没有成功。
您对 friend
在 C++ 中的含义的理解不正确。这涉及 friend 函数内私有 class 成员的可访问性——而不是作为运算符重载一部分的对象创建。 Fortran 的可访问性模型是不同的 - 在同一模块中定义为类型的任何过程都是 "friend",并且在可访问性方面,没有任何东西等同于成员函数。
两种语言中表达式求值的语义都要求运算符的源实现创建一个新对象来存储运算结果。在某些情况下,花哨的编译器优化可能会阻止实际创建函数结果的临时值,但这在很大程度上取决于细节。
我想知道在 Fortran 中是否有类似于来自 C++ 的 "friend function" 的东西。我希望能够在不创建新对象的情况下使运算符重载,因为它太昂贵了。我已经尝试在模块中创建对象并尝试使重载运算符 return 它,但没有成功。
您对 friend
在 C++ 中的含义的理解不正确。这涉及 friend 函数内私有 class 成员的可访问性——而不是作为运算符重载一部分的对象创建。 Fortran 的可访问性模型是不同的 - 在同一模块中定义为类型的任何过程都是 "friend",并且在可访问性方面,没有任何东西等同于成员函数。
两种语言中表达式求值的语义都要求运算符的源实现创建一个新对象来存储运算结果。在某些情况下,花哨的编译器优化可能会阻止实际创建函数结果的临时值,但这在很大程度上取决于细节。