0

我写了一个不可变类Coords,只有两个成员 - const int x和const int y。但是,编译器希望我编写一个赋值运算符,从我所能收集的内容来看,它对于不可变类型是没有意义的。这里有一个例子:我如何避免为我的不可变类写作业操作符

//location is a Coords* and Coords::DOWN is a static const Coords&. 
Coords& next = Coords(location); 
next = next + Coords::DOWN; 

智能感知不喜欢使用“=”在第3行我想,这个问题是我已经分配的内存“下一步”,所以,当我要更换用别的东西记在那个记忆里,它不喜欢那样。我对么?我怎样才能解决这个问题?

谢谢!

+2

如果你的类型是“不可变的”,你会如何期待这个* mutating *操作起作用? –

+0

'Coords(location)'创建一个临时的(你有一个悬挂引用),并且你不重新分配给一个引用,你分配给引用的'Coords'对象。 – LogicStuff

+1

“* Intellisense不喜欢在第3行中使用'='。*”它不应该喜欢第2行,但这是一个长期存在的VC++编译器错误,他们不太可能修复。 –

回答

1

你不希望'下一个'被引用到Coords。你希望它成为Coords类型的对象。试试这个:

Coords next = *location + Coords::DOWN 

析构函数“下一步”(通常在方法的结束)

你会想要写一个将被运行时“下一个”超出范围被称为+(加运算符)在任何情况下都会覆盖。 (你的对象不是不可变的,你需要阅读它)。

相关问题