在Ada中将记录作为函数参数传递时,避免复制对象

Dan*_*Dan 0 pointers ada

当传递in record给Ada中的函数或过程时,它按值传递.

我是否应该传递大记录access constant以避免副本(就像在C++中那样)?

Ada编译器通常能够自动优化该副本吗?

小智 8

没有!编译器可以自由选择副本或按引用.请参阅" 语言参考手册"

没有!

你可以这么说.编译器可以自由选择它最好的东西,根据我的经验,编译器"知道"如何比几乎所有软件开发人员更好地生成代码.

  • 此外,标记类型和有限类型(以及其他一些类型)是_by-reference types_.在Ada 2012中,您可以使用_explicitly别名参数强制by-reference_ (6认同)
  • 请注意,Ada子程序参数使用传递模式IN,OUT或IN OUT.如在其他响应中所述,编译器确定是使用通过引用传递还是通过复制.参数模式可以影响编译器的决策.使用IN模式传递的参数在被调用的子程序中是不可变的.必须修改使用OUT模式传递的参数,因为在修改之前,其值被视为无效.使用IN OUT模式传递的参数是可变的,但在传递给子程序时具有有效值. (2认同)