这显然是不好的:

int& GetInvalidIntPtr(){
   int i;
   return i;
}


这是我的示例:

FVector& GetDirectionFromCamera(){
   return GetActorLocation() - GetCameraComponent()->GetComponentLocation();
}


FVector基本上包含3个浮点数,这就是为什么我想返回引用而不是副本的原因。但是,我相信计算结果存储在堆栈中,对吗?
还是因为要立即返回结果而将结果分配在堆上?

最佳答案

一个FVector基本上拥有3个浮点数,这就是为什么我想返回
  地址而不是副本。


如果您想返回一个地址,那么为什么要返回一个引用呢?引用不是指针。

(已删除,因为问题已修改为使用单词“引用”代替“地址”。)




  但是,我相信计算结果存储在堆栈中,对吗?


这实际上取决于operator-的确切返回值。您没有显示给我们,所以我们不能确定,但​​是如果运算符只是返回FVector(应该如此),则您的代码将无法编译,因为不能使用临时的FVector初始化FVector&

通常,您的代码基于这样一个误解,即返回FVector的副本在某种程度上很糟糕。它不是。将函数签名更改为FVector GetDirectionFromCamera(),然后让编译器删除冗余副本。


  还是因为要立即返回结果而将结果分配在堆上?


不。所谓的“堆”仅在使用动态分配时起作用。

10-08 13:31
查看更多