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

Pointers 在Ada中将记录作为函数参数传递时,避免复制对象,pointers,ada,Pointers,Ada,将记录中的传递给Ada中的函数或过程时,它是按值传递的 然后我是否应该将大记录作为access constant传递以避免复制(就像在C++中那样) Ada编译器通常能够自动优化该副本吗?否!编译器可以通过复制或引用自由选择。见 不 你可以这么说。编译器可以自由选择它认为最好的,根据我的经验,编译器“知道”如何比几乎所有的软件开发人员更好地生成代码。此外,标记类型和有限类型(以及一些其他类型)是按引用类型生成的。在艾达2012中,可以通过引用显式别名参数来强制,通常C++开发人员由于容器的深度复

将记录中的
传递给Ada中的函数或过程时,它是按值传递的

然后我是否应该将大记录作为
access constant
传递以避免复制(就像在C++中那样)


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

否!编译器可以通过复制或引用自由选择。见


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

此外,标记类型和有限类型(以及一些其他类型)是按引用类型生成的。在艾达2012中,可以通过引用显式别名参数来强制,通常C++开发人员由于容器的深度复制而出现问题。容器必须被复制,因为几个世纪以前C中的参数是局部可变的,如果允许它在C中变异int的局部副本,那么应该允许它变异哈希映射的哈希映射的局部副本,因此必须为非常量参数创建局部副本。在Ada中,因为初始参数不是局部可变的,所以这个问题不是一个热门话题,而是一个类似于其他人所说的过早优化的问题。请注意,Ada子程序参数使用传入、传出或传出模式。正如在其他响应中所说,编译器决定是使用引用传递还是复制传递。参数模式会影响编译器的决策。在模式中使用传递的参数在被调用的子程序中是不可变的。必须修改使用OUT模式传递的参数,因为其值在修改之前被视为无效。使用IN-OUT模式传递的参数是可变的,但在传递到子程序时具有有效值。您的第一句话是错误的。省去一些麻烦,不要担心过早优化;-)