C ++参数是一个指向常量对象的指针,但不返回更新的对象?

时间:2011-10-25 14:00:54

标签: c++ pointers parameters vector const

我有原生C ++类SrcClass,其中包含以下内容:

std::vector<shotEntry> objectsQueue;

bool getRelatedEntry(const entryToProcess *entriesDeets, int &i) const {
    if (i >= (int)objectsQueue.size()) {
        i = 0;
        return false;}
    if (!objectsQueue.size()) return false;
    entriesDeets = &(objectsQueue[i++]);
    return true;
}

在我的客户中,我有:

const entryToProcess *entriesDeets = NULL;
int i = 0;
while (srcObj->getRelatedEntry(entriesDeets, i)) {

当我逐步执行getRelatedEntry形式参数时,entriesDeets会在返回之前按预期更新。当它返回时,客户端的实际参数不会更新。

这是我在两个月后回到的一个大项目。我很确定我做的最后一次重构是介绍这些该死的 vectors。当我弄乱标题时,编译需要很长时间。我是否对C#的初始化/ readonly / const'ness感到困惑?我可以让客户端获取只读本机对象吗?

3 个答案:

答案 0 :(得分:3)

entriesDeets是getRelatedEntry中的局部变量。你只修改了本地,你没有影响传入的值。你需要传递对指针的引用或指向指针的指针。

答案 1 :(得分:3)

这是因为您正在设置函数参数的值。你想要:

bool getRelatedEntry(const entryToProcess **entriesDeets, int &i) const {
    ...
    *entriesDeets = &(objectsQueue[i++]);
    ...

srcObj->getRelatedEntry(&entriesDeets, i)

答案 2 :(得分:2)

指针已更新,但它是函数内部的内部副本。如果您希望在函数外部看到该更改,则应传递引用:

//                                         v
bool getRelatedEntry(const entryToProcess *&entriesDeets, int &i) const {

或者在C风格中使用双指针并在每次使用时在内部取消引用:

//                                         v
bool getRelatedEntry(const entryToProcess **entriesDeets, int &i) const {
   // ...
   *entriesDeets = &(objectsQueue[i++]);