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

Is it possible to disable the intrinsic assignment for a specific derived type?

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

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

我已经尝试过声明类型绑定的赋值运算符并将其设为私有,但这只会导致调用内部赋值运算符。当然,我可以声明一个赋值运算符来停止程序,以便将其变成 运行 时错误,但我真的更希望这在编译时就已经失败了。

有什么办法吗?

不能完全抑制赋值(以及复制某些对象的值的能力,这与赋值有细微的不同)。

(请注意,Fortran 中的赋值要么是内在的,要么是定义的。如果您提供类型绑定定义的赋值,那么内在赋值将被禁用。问题实际上是在问如何禁用这两种赋值。)

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

具有出于某种原因需要抑制赋值的属性的类型可能最好(同样,这取决于环境)通过将类型名称保持私有并将该类型的对象包装为私有指针组件来对最终用户隐藏不同的包装派生类型,即 public。用户可以根据自己的喜好指定包装器类型,但他们真正做的只是复制引用。

(Fortran 语言没有赋值的概念 运算符,将赋值视为运算符是以后混淆的老路。)