这显然是不好的:
int& GetInvalidIntPtr(){
int i;
return i;
}
这是我的示例:
FVector& GetDirectionFromCamera(){
return GetActorLocation() - GetCameraComponent()->GetComponentLocation();
}
FVector基本上包含3个浮点数,这就是为什么我想返回引用而不是副本的原因。但是,我相信计算结果存储在堆栈中,对吗?
还是因为要立即返回结果而将结果分配在堆上?
最佳答案
一个FVector基本上拥有3个浮点数,这就是为什么我想返回
地址而不是副本。
如果您想返回一个地址,那么为什么要返回一个引用呢?引用不是指针。
(已删除,因为问题已修改为使用单词“引用”代替“地址”。)
但是,我相信计算结果存储在堆栈中,对吗?
这实际上取决于operator-
的确切返回值。您没有显示给我们,所以我们不能确定,但是如果运算符只是返回FVector
(应该如此),则您的代码将无法编译,因为不能使用临时的FVector
初始化FVector&
。
通常,您的代码基于这样一个误解,即返回FVector
的副本在某种程度上很糟糕。它不是。将函数签名更改为FVector GetDirectionFromCamera()
,然后让编译器删除冗余副本。
还是因为要立即返回结果而将结果分配在堆上?
不。所谓的“堆”仅在使用动态分配时起作用。