Nói rằng tôi có một Fortran có nguồn gốc loạiFortran loại có nguồn gốc phân
type :: atype
integer :: n
integer :: a(10)
integer, allocatable :: b(:)
end type
và tôi có hai trường hợp thuộc loại này
type(atype) :: t1, t2
chính xác những gì sẽ xảy ra khi tôi làm nhiệm vụ sau đây?
t2 = t1
Tôi quan tâm đến điều này bởi vì tôi muốn thực hiện một cách chính xác các bản sao của biến loại có nguồn gốc có nghĩa là, các thành phần vô hướng nên được bình đẳng, mỗi yếu tố của các thành phần mảng cần được bình đẳng và mảng allocatable nên có kích thước phân bổ cùng và các phần tử phải bằng nhau. Tại thời điểm này tôi sẽ chỉ viết một chương trình con sao chép và phân bổ các thành phần một cách chính xác.
subroutine copy_atype(from, to)
type(atype) :: from, to
to%n = from%n
to%a = from%a
if (allocated(to%b)) deallocate(to%b)
if (allocated(from%b) then
allocate(to%b(size(from%b)))
to%b = from%b
end if
end subroutine
Tôi sẽ đánh giá cao chỉ đường cho các phần phù hợp trong tiêu chuẩn.
Tôi đang sử dụng gfortran 4.7.
Điều cần biết, mặc dù không chính xác những gì tôi đang tìm kiếm. – stiaan