Fortran 2003派生类型具有默认初始化的一个很好的功能。
type TTest
integer :: a
integer :: b = 1
integer, pointer :: p1, p2 => null()
end type TTest
然后任何类型(TTest)的声明变量默认都会初始化组件b和p2。
请考虑以下代码:
type (TTest), dimension(:), pointer :: varptr
type (TTest), dimension(:), allocatable :: varalloc
integer, parameter :: ndim = 1000
allocate( varptr(ndim))
allocate(varalloc(ndim))
可以保证varptr和varalloc的所有元素在分配后都会有初始化的b和p2成员吗?
答案 0 :(得分:1)
是的,标准要求。只要你有一个派生类型的变量,它就会初始化那些组件。
F2008 4.5.4.6.3:如果指针组件出现 null-init ,那就是 任何类型的对象中的组件具有初始关联 分离的状态(1.3)或按照规定解除关联 16.5.2.4。
F2008 4.5.4.6.6:如果非指针组件出现 constant-expr ,则该组件在 类型的任何对象最初定义(16.6.3)或定义为16.6.5中指定的值,其值由 constant-expr ...