说我有一个数组std::vector<Foo>
,我想遍历我所有的Foo和做的东西做出来,像这样:如何避免意外地通过值而不是通过引用获取数组元素?
for (auto foo : vecFoo)
foo.x = 10;
这结束了做什么,因为它使得vecFoo内容的本地副本,而不是对它的引用。正确的循环如下:
for (auto& foo : vecFoo)
foo.x = 10;
这是我现在做了几次失误,所以我想为它找到一个解决方案,将赶上我,当我做错了。我会很满意我可以对结构做些什么或者可以打开一个警告标志。我试过使Foo
的拷贝构造函数私有,但最终我无法做到push_back
或emplace_back
,这显然不是我想要的。
经验和肌肉记忆 –
@DavidRodríguez-dribeas - 和单元测试。 –
对于那些不记得在函数结尾删除它们的指针的人,我们有一些像scoped_ptr这样的东西,我正在为像我这样的人提出一些机制,这些机制并不总是记住循环中的小小&。机械解决方案会很好。 – Alex