是否可以禁用特定派生类型的内在赋值?

时间:2017-01-07 21:23:19

标签: fortran assignment-operator

是否可以在Fortran中禁用特定派生类型的内部赋值运算符?基本上我想做以下编译时错误:

type(MyType) :: a, b
a = b

我已经尝试声明一个类型绑定赋值运算符并将其设置为私有,但这只会导致调用内部赋值运算符。当然,我可以声明一个用于停止程序的赋值运算符,以便将其转换为运行时错误,但我真的更喜欢在编译时它是否已经失败。

有什么办法吗?

1 个答案:

答案 0 :(得分:2)

无法完全抑制赋值(以及复制某个对象的值的能力,这是赋值的一个微妙的不同之处)。

(请注意,Fortran中的赋值是固有的或已定义的。如果提供类型绑定定义的赋值,则禁用内部赋值。问题是如何禁用这两种赋值。)

但是......如果类型名称不可访问,并且该类型的任何可访问变量都是已知的(从标准中的约束的角度来看)是不可定义的(即它们是受保护的),那么赋值不能在没有某种编译错误的情况下使用。这是否有用取决于具体情况。

由于某些原因需要抑制赋值的属性可能最好(再次,它取决于具体情况)通过将类型名称保持为私有并将该类型的对象作为私有指针组件包装在不同的包装器中而对最终用户隐藏派生类型是公开的。用户可以将包装类型分配给他们的内容,但他们真正做的就是复制引用。

(Fortran语言没有赋值运算符的概念,考虑赋值作为运算符是以后混淆的一条很好的路径。)