我一直认为 fortran 将实体“通过引用”传递给虚拟参数。然后我得到了这个答案(答案的实际论点是相关的,但不是这个)
该标准从不指定这一点,并且确实非常规避此类规范。尽管您的误解是一个常见的误解,但即使在大多数较旧的编译器中,它也不是严格准确的,尤其是在启用优化的情况下。严格的按引用传递会扼杀许多常见的优化。
使用最近的标准,在某些情况下几乎不允许引用传递。该标准在其规范性文本中没有使用这些词,但有些事情通过引用传递是不切实际的。
当你开始研究指针之类的东西时,假设一切都是按引用传递的错误将开始变得比以前更加明显。你必须放弃这种误解,否则很多事情会让你感到困惑。
我认为其他人已经充分回答了帖子的其余部分。有些人也提到了上述观点,但我想强调一下。
请参阅此处了解归属。
根据这个答案,标准中没有任何内容指定数据如何从调用者传送到被调用者。实际上,应该如何从实际使用它的角度来解释它(不管编译器如何实现标准所产生的实际效果),特别是在 intent() 规范方面?
编辑:我想澄清我的问题。我想了解的是标准期望您在执行呼叫时如何工作。鉴于标准未定义用于传递实体的实际编译器策略,原则上(根据标准)您不能期望将参数传递给函数实际上将表现为“按引用传递”,其所有相关的副作用,因为此行为取决于编译器和优化。因此,我假设该标准强加了您必须遵循的编程风格,而不管实际的实施策略如何。