PVi*_*itt 2 fortran pointers constants
我刚刚开始在Fortran中使用指针,最近偶然发现,Fortran中的指针不能保持不变.这意味着,这样的事情是不可能的:
procedure(proc_type), pointer, parameter :: fPtr => myFunc
Run Code Online (Sandbox Code Playgroud)
我试图找出为什么这是不可能的原因.但我发现的唯一一件事就是"现代Fortran解释":
另请注意,常量可能不是指针[..],因为它们始终是变量.
但这并不能解释背后的原因.有谁知道这个?
因为Fortran规则是这样说的
Fortran 2008(ISO/IEC 1539-1:2010):
5.3.14 POINTER属性
1具有POINTER属性的实体可以在执行程序期间与不同的数据对象或过程相关联.指针是数据指针或过程指针.过程指针在12.4.3.6中描述.
这与常量不兼容.
为什么规则如此?因为标准的作者就这样做了.
为什么他们这样做?对此的答案通常非常简单 - 因为没有人提出不同的规则需要委员会讨论和批准,或者委员会的一些成员不喜欢它.你真的要问他们 - J3和SC22/WG5,但要准备好答案,没有具体原因.
在某些属于同一类别的语言中,例如C和C++,常量指针是可能的.初始化的常量指针指向整数常量
const int i = 3;
static int* const x=(int*)&i;
Run Code Online (Sandbox Code Playgroud)
一个常量指针初始化为指向整数函数
int fun(){
return 1;
}
static int (* const x)()=&fun;
Run Code Online (Sandbox Code Playgroud)
绝对有可能在Fortran中允许这样的东西.请联系Fortran标准委员会的代表,以建议这样的功能.
如IanH和credondo所示,有一些方法可以绕过这种限制,但是这个答案试图让我保持原始问题的界限.为何存在此限制?