已定义的运算符

定义的运算符是用户定义的一元或二元运算符,或者是扩展的内部运算符 (请参阅 扩展的内部和定义的操作)。 它必须由函数和通用接口块定义。
  1. 定义一元运算 op x₁
    1. 必须存在一个函数或入口,它只指定一个哑参数 d₁
    2. Fortran 2003 开始 或者:
      1. INTERFACE 语句中的 generic_spec 指定 OPERATOR (op),或者
      2. 在声明的类型中有一个泛型绑定 x1通用规格OPERATOR(op),并且动态类型中的函数也有相应的绑定 x1Fortran 2003 结束
    3. 动态类型 x₁ 与哑参数 d₁ 的类型兼容。
    4. x₁ 的类型参数(如果有)必须与 d₁ 的类型参数匹配。
    5. 或者
      • 函数为 ELEMENTAL,或
      • x₁ 的秩及其形状(如果是一个数组)与 d₁ 的匹配
  2. 定义二元运算 xlox-op xrop
    1. 该函数与 FUNCTIONENTRY 语句一起指定,该语句指定了两个哑参数 d öd ²
    2. Fortran 2003 开始 或者:
      1. INTERFACE 块中的 generic_spec 指定 OPERATOR (op),或者
      2. 在声明的类型中存在泛型绑定 x1x2通用规格OPERATOR(op),并且动态类型中的函数存在相应的绑定 x1x2Fortran 2003 结束
    3. x₁x₂ 的动态类型分别与哑参数 d₁d₂ 的类型兼容。
    4. x₁x₂ 的类型参数(如果有)分别与 d₁d₂ 的类型参数匹配。
    5. 或者:
      • 该函数为 ELEMENTALx ²x ² 是一致的,或者,
      • x₁x₂ 的秩及其形状,如果其中一个或两者都是数组,则分别与 d₁d₂ 的等级匹配。
  3. 如果 op 是内在运算符,则 x₁x₂ 类型或秩不是内在运算所需的。
  4. generic_spec 不得对没有自变量的函数或对具有两个以上自变量的函数指定 OPERATOR
  5. 每个参数都必须是非可选的。
  6. 这些参数必须与 INTENT(IN)一起指定。
  7. 接口中指定的每个函数都不能有假定字符长度的结果。
  8. 如果指定的运算符是内部运算符,那么函数参数的数目必须与该运算符的内部用途一致。
  9. 与泛型名称一样,给定的定义运算符可以应用于多个函数,在这种情况下,它就像泛型过程名称一样是泛型的。 对于内部运算符符号,通用属性包括它们所代表的内部运算。
  10. IBM 扩展开始 以下规则仅适用于扩展的固有操作:
    1. 仅当另一自变量的类型为派生类型时,其中一个自变量的类型才能为 BYTE 类型。
    2. 为非字符运算指定了 -qintlog 编译器选项并且 d₁ 是数字或逻辑时,d₂ 不得是数字或逻辑。
    3. 为非字符运算指定了 -qctyplss 编译器选项时,如果 x₁ 是数字或逻辑且 x₂ 常量,则执行内部运算。
    IBM 扩展结束

示例

INTERFACE OPERATOR (.DETERMINANT.)
   FUNCTION IDETERMINANT (ARRAY)
    INTEGER, INTENT(IN), DIMENSION (:,:) :: ARRAY
     INTEGER IDETERMINANT
  END FUNCTION
 END INTERFACE
END