Fortran模拟到C++;函数参数 在C++中,各种选项都可以将参数传递给函数(通过值、引用、指针、引用const、指向const、……)。 我想知道对于所有这些选项,Fortran模拟是什么。这种类比将从概念的角度出发,而不是从互操作性的角度出发
据我所知,Fortran通过引用传递其参数,但有一些例外(非连续数组)。考虑到这一点,以下转换是正确的,还是可以提供更好的属性Fortran模拟到C++;函数参数 在C++中,各种选项都可以将参数传递给函数(通过值、引用、指针、引用const、指向const、……)。 我想知道对于所有这些选项,Fortran模拟是什么。这种类比将从概念的角度出发,而不是从互操作性的角度出发,fortran,Fortran,据我所知,Fortran通过引用传递其参数,但有一些例外(非连续数组)。考虑到这一点,以下转换是正确的,还是可以提供更好的属性 void f(X);//传递值 这只是传递的原始值的副本 SUBROUTINE f(x) TYPE(X), VALUE :: x ... END SUBROUTINE f void f(X&X);//按参考传递 这里的x是一个值已更新的引用。由于Fortran中的“默认”是通过引用传递,因此我看到还有两个可能的选项:参数anINTENT(OUT)或IN
这只是传递的原始值的副本void f(X);//传递值
SUBROUTINE f(x) TYPE(X), VALUE :: x ... END SUBROUTINE f
这里的void f(X&X);//按参考传递
是一个值已更新的引用。由于Fortran中的“默认”是通过引用传递,因此我看到还有两个可能的选项:参数anx
或INTENT(OUT)
INTENT(INOUT)
此处void f(X const&X);//通过引用传递到const
是一个值无法更新的引用x
SUBROUTINE f(x) TYPE(X), INTENT(IN) :: x ... END SUBROUTINE f
这只是传递的指针的副本。但是,这意味着应该组合属性void f(X*p);//通过指针传递
和指针
,但Fortran中不允许这样做。我能想象的唯一选择是值
SUBROUTINE f(x) TYPE(X), INTENT(INOUT) :: x TYPE(X), POINTER :: p => x ... END SUBROUTINE f
这里的void f(X const*p);//通过指针传递到常量
是一个指针,指向复制过来的常量。然而,这与p
f(X*p)
这里的void f(X*const p);//传递常数指针
是一个不能更改的指针,但它指向的对象可以更改。同样地,p
是一个副本,而不是参考p
SUBROUTINE f(x) TYPE(X), INTENT(INOUT) :: x TYPE(X), POINTER, PARAMETER :: p => x ... END SUBROUTINE f
SUBROUTINE f(x) TYPE(X), INTENT(IN) :: x TYPE(X), POINTER, PARAMETER :: p => x ... END SUBROUTINE f
这里的void f(X常数*常数p);//传递常数指针
是一个不能改变的指针,它所指向的对象也不能改变。同样地,p
是一个副本,而不是参考p
SUBROUTINE f(x) TYPE(X), INTENT(INOUT) :: x TYPE(X), POINTER, PARAMETER :: p => x ... END SUBROUTINE f
SUBROUTINE f(x) TYPE(X), INTENT(IN) :: x TYPE(X), POINTER, PARAMETER :: p => x ... END SUBROUTINE f
这是对指针的引用,void f(X*&p);//通过引用传递到指针
及其指向的对象都可以更改p
SUBROUTINE f(p) TYPE(X), POINTER, INTENT([IN]OUT) :: p ... END SUBROUTINE f
此处void f(X const*&p);//通过引用传递到指向常量的指针
引用指向常量对象的指针。 这里似乎没有类似的情况p
这里的void f(X*const&p);//通过引用传递到常量指针
是对指针的引用,指针不能更改,但它指向的对象可以更改p
SUBROUTINE f(p) TYPE(X), POINTER, INTENT(IN) :: p ... END SUBROUTINE f
这里的void f(X常数*const&p);//通过引用传递到常数指针到常数
是对指针的引用,指针不能更改,指针指向的对象也不能更改。这里有类似的吗p
值
也是使用地址传递的。但它是副本的地址。