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

Fortran 是否可以禁用特定派生类型的内部赋值?,fortran,assignment-operator,Fortran,Assignment Operator,是否可以在Fortran中禁用特定派生类型的内部赋值运算符?基本上,我希望将以下内容设置为编译时错误: type(MyType) :: a, b a = b 我已经尝试过声明一个类型绑定赋值运算符并将其设置为私有,但这只会导致调用内部赋值运算符。当然,我可以声明一个赋值运算符来停止程序,以便将其转化为运行时错误,尽管我更希望它在编译时已经失败 有什么办法吗?赋值(以及复制某个对象的值的能力,这与赋值有着微妙的不同)不能被完全抑制 (请注意,Fortran中的赋值是内部赋值或已定义赋值。如果提供

是否可以在Fortran中禁用特定派生类型的内部赋值运算符?基本上,我希望将以下内容设置为编译时错误:

type(MyType) :: a, b
a = b
我已经尝试过声明一个类型绑定赋值运算符并将其设置为私有,但这只会导致调用内部赋值运算符。当然,我可以声明一个赋值运算符来停止程序,以便将其转化为运行时错误,尽管我更希望它在编译时已经失败

有什么办法吗?

赋值(以及复制某个对象的值的能力,这与赋值有着微妙的不同)不能被完全抑制

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

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

如果类型的属性出于某种原因需要禁止赋值,则最好(同样,这取决于具体情况)对最终用户隐藏该类型,方法是保持类型名为private,并将该类型的对象作为私有指针组件包装在另一个包装器派生的公共类型中。用户可以将一个包装类型分配给他们的内容,但他们真正做的只是复制一个引用


(Fortran语言没有赋值操作符的概念,将赋值作为操作符来考虑是一条很容易引起后来混淆的老路。)

我认为没有。