0

我在许多平台上进行开发,今天我遇到了 iOS 和 xCode 的问题,我正在将一些项目更新到最新的 xCode 4.3.2(Apple LLVM 编译器 3.1)

由于几次警告已成为错误:“获取临时对象的地址”

不幸的是,我使用了很多,请参阅我的示例:

float dist = Vector3Dlength(&Vector3D(pos2 - pos1));
  • 避免创建一个临时变量并生成一行新代码(尽管这行代码是由编译器在堆栈上创建的)
  • 我知道自 10 年的编码以来可能导致的错误 :) 但我想继续这样......

有人建议避免此错误而无需编辑代码?(使用新的 xCode 4.3.2(Apple LLVM 编译器 3.1))

4

1 回答 1

2

您需要更改代码,不能获取不是lvalue的地址,并且临时地址不是 lvalue 。

更改您的代码以改为使用 const 引用Vector3D。这不会花费您一份副本,并且是明确定义的行为。

float Vector3Dlength(Vector3D const& pvect) {
  return sqrt(pvect.x * pvect.x ...);
}

...
float dist = Vector3Dlength(Vector3D(pos2 - pos1));
于 2012-05-04T13:38:06.620 回答