1

如果我打算在多个条件块中使用它,我应该如何声明一个引用变量?例如:

for (i = ...) {
    if (expr_1(i)) {
        // y[idx(i)] only exists when expr_1 is true
        // i.e. idx(i) is a valid index only when expr_1 is true 
        MyType &x = y[idx(i)];  
        ...
    }

    ... // Stuff not dependent on x

    if (expr_2(i)) {   // (expr_2 is such that expr_1 implies expr_2)
        foo(x);        // error, as x not scoped to persist to here
        ...
    }

    ... // More stuff not dependent on x

    if (expr_3(i)) {   // (expr_3 is such that expr_1 implies expr_3)
        bar(x);        // error, as x not scoped to persist to here
        ...
    }

    ... // etc
}

我不能在条件块之外声明它,因为引用变量必须在声明时初始化,但它引用的变量只存在于条件块中。

4

1 回答 1

1

这些方法中的任何一种都适合您吗?

  1. 如果您对使用引用没有硬性要求,请尝试使用指针。然后您可以在父范围内声明它并使用 NULL 进行初始化。然后稍后在使用前检查非空值。

  2. 如果 MyType 是一个对象,您可以让它从定义 IsInitialized() 的基础派生,然后调用它。如果 MyType 是一个标量,那么如果有一个值在该类型的范围内,但超出了该类型所代表的范围,则使用这样的值来指示“未设置”并执行以下操作:

.

MyType notInitialised(NOT INITIALISED VALUE);
for (i = ...)
{
        MyType &x = expr_1(i) ? y[idx(i)] : notInitialised; 
        // code not needing x
        if (expr_2(i) && x != notInitialised) {
            ...
        }

希望有帮助吗?

于 2013-05-06T18:57:03.300 回答