【发布时间】:2018-05-20 17:02:10
【问题描述】:
对于我的一个函数,cppcheck 返回: 参数'neighbors'按值传递。它可以作为 (const) 引用传递,这在 C++ 中通常更快且推荐使用。
我知道在可以传递引用时两次分配向量是没有意义的,但我真的不知道该怎么做...... 我在这里尝试了很多类似的答案,但我找不到真正适合我的问题的答案。
类向量矩阵
此函数获取所有邻居并将它们存储在一个
std::vector<Cell*> vectorMatrix::getCellNeighbors(int x, int y) {
std::vector<Cell*> neighbors;
return neighbors;
}
此函数将每个单元格的邻居传递给单元格(存储它们以便快速访问...每次点击都需要它们)
void vectorMatrix::initCells()
{
for (int x = 0; x < _rows; x++)
{
for (int y = 0; y < _columns; y++)
{
_cellMatrix[x][y]->setNeighbors(getCellNeighbors(x, y));
}
}
}
类单元
HXX
std::vector<Cell*> _neighbors;
CXX
void Cell::setNeighbors(std::vector<Cell*> neighbors)
{
_neighbors = neighbors;
}
。)我如何正确地将向量作为(const?)引用传递。 .) 这段代码有效吗?在每个单元格内存储对所有邻居的引用是否有意义? (地图尺寸最大可达 256x256,每个图块都是一个对象)
完整的代码可以在这里找到: https://github.com/JimmySnails/IsometricEngine
【问题讨论】:
-
const_cast<const std::vector<Cell*>>: 这是你想要的吗? -
我想要一个详细的答案,这不足以让我理解如何传递 const refs...
-
我要求澄清一下。无论如何,您想要一个恒定向量还是恒定单元的向量?还是常数单元的常数向量?
-
你的函数 ccpCheck 看起来如何?您的 getCellNeighbors 不是“正确的”,因为它只是返回一个局部变量,只是被复制,也许那里还有其他代码,没有显示?。
-
哦,对不起。根据 cppcheck,向量本身应该是一个 const 引用。现在我想到了,里面的 Cell* 可能是不变的,因为它们不会改变。这对性能有帮助还是只是为了“安全”