使用C++,如何传递void函数中的值

With C++ how do I Pass a value from a void function?

本文关键字:函数 void 何传递 C++ 使用      更新时间:2023-10-16

我在一个类中有两个C++函数:

void Attribute::setIndex(int inIndex) {
    if (inIndex < 0) {
        index = 0;
    }
    else if (inIndex >= MAX_NUM_ATTRIBUTES) {
        index = MAX_NUM_ATTRIBUTES - 1;
    }
    else {
        index = inIndex;
    }
}

int Attribute::getValueWithinRange(int value) {
    value = setIndex(value);
    return value;
}

第二个函数应该使用setIndex将"value"设置为正确的数字并返回。但是,由于第一个函数是void函数,我不能像上面那样简单地传递值。我应该通过参考还是有什么建议?非常感谢。

我只想指出,如果你在学习C++,你应该先尝试学习模型案例,有时匆忙的例子不是最好的方法,但我们做到了:


将setIndex更改为返回我最喜欢的int;

int Attribute::setIndex(int inIndex)
{
    if (inIndex < 0)
    {
        index = 0;
    }
    else if (inIndex >= MAX_NUM_ATTRIBUTES)
    {
        index = MAX_NUM_ATTRIBUTES - 1;
    }
    else
    {
        index = inIndex;
    }
    return index;
}

int Attribute::getValueWithinRange(int value)
{
    value = setIndex(value);
    return value;
}

将getValueWithinRange更改为返回索引,两个方法都在一个类中,它们共享对索引的访问权限;

int Attribute::getValueWithinRange(int value)
{
    setIndex(value);
    return index;
}

给它提供引用是可行的,但除非使用技巧,否则不能将引用设置为null,这将需要不必要的另一种方法,所以指针使它不那么混乱:

int Attribute::setIndex(int inIndex, int* ret_index = nullptr)
{
    if (inIndex < 0)
    {
        index = 0;
    }
    else if (inIndex >= MAX_NUM_ATTRIBUTES)
    {
        index = MAX_NUM_ATTRIBUTES - 1;
    }
    else
    {
        index = inIndex;
    } 
    if (ret_index != nullptr) *ret_index = index;
    return index;
}

int Attribute::getValueWithinRange(int value)
{
    int retvalue;
    setIndex(value); // use it like this when returning value is not needed
    setIndex(value, &retvalue);
    return retvalue;
}