Fortran元素函数与元素子例程

drl*_*mon 8 parallel-processing performance multithreading fortran fortran90

Fortan允许元素子例程具有intent(inout)和intent(out)参数,但元素函数仅允许intent(in).

这是为什么?它只是一种风格约定,还是在调用函数和调用子例程方面有一些不同之处?

换一种说法,

Elemental Integer Function FOO(i)
  Integer, intent(in) :: i
    ...
  FOO=something
End Function
Run Code Online (Sandbox Code Playgroud)

Elemental Subroutine FOO(i, v)
  Integer, intent(in)  :: i
  Integer, intent(out) :: v
    ...
  v=something
End Subroutine
Run Code Online (Sandbox Code Playgroud)

- 这些FOO的实现是否等效?

Vla*_*r F 6

如果没有至少一个参数标记为intent(out)或者intent(inout),则没有必要使用元素子例程,因为您必须以某种方式传递结果.函数有其返回值,子例程必须使用其参数.在Fortran 2008中,AFAIK元素程序不一定是纯粹的,但很难想象一个有用的元素子程序只能通过它的副作用.