Xcode 获取临时对象的地址

Xcode 获取临时对象的地址,xcode,Xcode,我在很多平台上开发,今天我遇到了iOS和xCode的问题, 我正在将一些项目升级到最新的xCode 4.3.2(Apple LLVM编译器3.1) 由于时间不多,一条警告变成了错误:“获取临时对象的地址” 不幸的是,我使用了很多,请参见我的示例: float dist = Vector3Dlength(&Vector3D(pos2 - pos1)); 避免创建临时变量并生成新的代码行(尽管这是编译器在堆栈上创建的) 我知道这样的编码10年后可能会导致的错误:)但我想继续这样做 有人

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

由于时间不多,一条警告变成了错误:“获取临时对象的地址”

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

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

有人建议避免这个错误而不必编辑代码吗?(使用新的xCode 4.3.2(Apple LLVM compiler 3.1))

您需要更改代码,不能获取非左值的地址,临时地址也不是左值

将代码更改为将常量引用改为
Vector3D
。这不会花费您一份拷贝,而且是定义良好的行为

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

...
float dist = Vector3Dlength(Vector3D(pos2 - pos1));

你能展示Vector3Dlength的定义吗?float Vector3Dlength(Vector3D const*pvect)这是声明。这个函数对指针有什么作用?它存储在任何地方吗?返回SQRT((pvect->x*pvect->x)+(pvect->y*pvect->y)+(pvect->z*pvect->z));既然代码已经坏了,为什么你不能编辑它呢?同意-为什么在你的代码库中保留垃圾代码只是避免编辑它?