gpt4 book ai didi

c++ - 如何声明一个引用变量在条件 block 之间持续存在?

转载 作者:太空宇宙 更新时间:2023-11-04 11:55:18 25 4
gpt4 key购买 nike

如果我计划在多个条件 block 中使用引用变量,我应该如何声明它?例如:

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
}

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

最佳答案

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

  1. 如果您对使用引用没有硬性要求,请尝试使用指针。然后你可以在父作用域中声明它并用 NULL 初始化。然后在使用前检查 not-NULL。

  2. 如果 MyType 是一个对象,您可以让它从定义 IsInitialised() 的基派生,然后调用它。如果 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) {
...
}

希望对您有所帮助?

关于c++ - 如何声明一个引用变量在条件 block 之间持续存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16404909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com