如果在if语句中实现,函数存储值是否会?

时间:2015-02-11 20:05:22

标签: c++

我正在编写一个c ++代码来执行反向波兰表示法数学。为此,我有一个堆栈类,它有一个布尔方法 pop(value)

bool pop(int &value) {
    if (isEmpty()) {
        return false;
    } else {
        value = stack[topIndex];
        return true;
    }
};

其中堆栈的最高值存储在中,然后从堆栈中删除。如果堆栈为空,则此pop方法返回 false ,否则返回 true

我的问题是,如果我使用 pop 方法,请执行以下操作:

int a, b;

if (!stack.pop(a) || !stack.pop(b)) {
    cout << "Error: stack is empty: << endl;
}

两次返回 true 时,每种情况下堆栈的最高值是否会存储在 a b 中,或者我是需要在 if 语句之外实现该方法吗?

4 个答案:

答案 0 :(得分:5)

您的if从左到右进行评估,对于

if (!stack.pop(a) || !stack.pop(b)) {

首先设置

a,然后设置b

另请注意,您的pop方法实际上并没有实际弹出堆栈 - 您只返回最顶层的值。

答案 1 :(得分:3)

你有什么好。逻辑或运算符(||)短路意味着右侧只有在左侧评估为false时才会执行。在第一次弹出成功的情况下,左侧是false,因此右侧也将被评估,并且如果堆栈不为空,则存储适当的值。

答案 2 :(得分:2)

该值将存储在a和b中。

注意 pop函数传统上会删除列表的最后一个元素并将其返回给调用者。你在做什么不是流行音乐。

答案 3 :(得分:1)

是的,pop函数通常会在if语句中执行,因此将存储该值。