Types 固有类型与基本非固有类型
我在fortran中遇到了“固有类型”这个词,我以前从未听说过: Fortran有五种内在数据类型:整数、实数、复数、逻辑和字符 内在与“原始”是同一事物,还是在意义上有细微差别?内在类型(我可以想象类似日期或十进制的东西)的反面是什么:它将被称为什么?Fortran标准将内在类型(通常,不仅仅是类型)定义为: 1.3.93 固有的 ISO/IEC 153917本部分中定义且无需进一步定义或规范即可访问的类型、程序、模块、分配、操作员或输入/输出操作,或处理器提供但ISO/IEC 1539本部分中未定义的程序或模块 此外,它对固有类型的定义如下: 1.3.147.8 固有类型 ISO/IEC 1539本部分定义的类型,可随时访问 因此,内部类型和派生类型之间的主要区别在于,必须导入库才能使用最后一个库。(我之前已经从Types 固有类型与基本非固有类型,types,fortran,primitive,primitive-types,Types,Fortran,Primitive,Primitive Types,我在fortran中遇到了“固有类型”这个词,我以前从未听说过: Fortran有五种内在数据类型:整数、实数、复数、逻辑和字符 内在与“原始”是同一事物,还是在意义上有细微差别?内在类型(我可以想象类似日期或十进制的东西)的反面是什么:它将被称为什么?Fortran标准将内在类型(通常,不仅仅是类型)定义为: 1.3.93 固有的 ISO/IEC 153917本部分中定义且无需进一步定义或规范即可访问的类型、程序、模块、分配、操作员或输入/输出操作,或处理器提供但ISO/IEC 1539本部分
ISO_FORTRAN_ENV
库中使用real(real64)制作了一个非内在的示例,但正如francescalus在评论中指出的那样,情况并非如此。)
您可能还想查看标准的会话4.4,该会话专门详细讨论了内部类型。Fortran标准是非官方的,不是最新的,但作为Fortran哲学的一部分,最新的标准与旧标准是一致的
我在Fortran标准中没有找到任何与原语
匹配的名称,因此我相信Fortran中没有使用这个术语。我还检查了C标准,没有找到任何正式的定义,但我在其他语言中找到的每个术语定义(例如在Java中)基本上都将其定义为该语言附带的类型,即内在的。:)
也许您要寻找的区别是,尽管在Fortran中,
real
是一种固有类型,但双精度不是:
实数类型的类型说明符使用关键字real。关键字DOUBLE PRECISION是一种实数类型的替代说明符。如果使用的type关键字REAL没有种类类型参数,则指定具有默认实数种类的实数类型,并且种类值为种类(0.0)。类型说明符DOUBLE PRECISION使用双精度种类指定类型real;种类值为种类(0.0D0)。双精度实数近似法的小数精度应大于默认实数法的小数精度
但是,在其他语言中,诸如short
和long
之类的类型可以理解为不同的原语。Fortran标准将内部(通常,不仅仅是类型)定义为:
1.3.93
固有的
ISO/IEC 153917本部分中定义且无需进一步定义或规范即可访问的类型、程序、模块、分配、操作员或输入/输出操作,或处理器提供但ISO/IEC 1539本部分中未定义的程序或模块
此外,它对固有类型的定义如下:
1.3.147.8
固有类型
ISO/IEC 1539本部分定义的类型,可随时访问
因此,内部类型和派生类型之间的主要区别在于,必须导入库才能使用最后一个库。(我之前已经从ISO_FORTRAN_ENV
库中使用real(real64)制作了一个非内在的示例,但正如francescalus在评论中指出的那样,情况并非如此。)
您可能还想查看标准的会话4.4,该会话专门详细讨论了内部类型。Fortran标准是非官方的,不是最新的,但作为Fortran哲学的一部分,最新的标准与旧标准是一致的
我在Fortran标准中没有找到任何与原语
匹配的名称,因此我相信Fortran中没有使用这个术语。我还检查了C标准,没有找到任何正式的定义,但我在其他语言中找到的每个术语定义(例如在Java中)基本上都将其定义为该语言附带的类型,即内在的。:)
也许您要寻找的区别是,尽管在Fortran中,
real
是一种固有类型,但双精度不是:
实数类型的类型说明符使用关键字real。关键字DOUBLE PRECISION是一种实数类型的替代说明符。如果使用的type关键字REAL没有种类类型参数,则指定具有默认实数种类的实数类型,并且种类值为种类(0.0)。类型说明符DOUBLE PRECISION使用双精度种类指定类型real;种类值为种类(0.0D0)。双精度实数近似法的小数精度应大于默认实数法的小数精度
但是,在其他语言中,诸如
short
和long
之类的类型可以理解为不同的原语。内部类型是由Fortran标准定义并始终可访问的数据类型之一(rvbarreto的答案包含一个明确的定义引号)。截至2018年Fortran,这是问题的五个方面
在Fortran 90引入种类参数系统之前,存在类型
双精度
,但这现在不是一种不同的内在类型:它指的是具有特定种类参数的内在类型实型
与内在类型不同的是类似的东西:一个总是可以访问但由特定处理器(编译器)定义的类型。一个例子可以是字节
数据类型
此外,还有衍生数据
type :: date
real :: seconds_since_epoch
end type date
type :: decimal(digits)
integer, kind :: digits
integer :: value(digits)
end type decimal
real a ! Intrinsic
byte b ! Non-standard 'primitive' perhaps (if supported)
type(byte) c ! Derived type, non-standard/user
type(c_ptr) d ! Standard (if referring to that of iso_c_binding)
type(real) e ! Intrinsic!
double precision f ! Intrinsic (real)