通过引用或值返回类的大数据成员

Return large data members of a class by reference or value

本文关键字:数据成员 返回 引用      更新时间:2023-10-16

在getter类型的方法中,我想知道哪个是最好的,关于这一点的意见似乎各不相同,因为一方面你通过引用返回打破了封装,但另一方面,如果你想要成员首先是可变的,那么按值返回会带来很多开销。在这些情况下,总是通过引用返回,让被调用方根据上下文决定是否要创建副本,这不是最好的方法吗?

我认为返回const引用将是您最好的选择。这样可以避免复制大量数据的开销,但也不允许外部进行更改。

现代编译器可以优化按值返回并消除任何复制/移动开销[1][2]。所以你不用担心这个。

决定有一个副本或返回一个引用应该是API设计者的规则,而不是客户端,你应该告诉这个对象是否应该是可变的,并根据这个类的用例和它应该满足的要求来定义你的API。


1。复制省略

2。RVO