c++ - 如何使用单个 return 语句返回对变量的引用

标签 c++

考虑以下代码段。

MyType_t& Variable(int i) {
    if (i == 0) {
        return MyVariable0;
    }
    if (i == 1) {
        return MyVariable1;
    }
    return MyDefaultVariable;
}

这将返回对变量的引用,然后可以对其进行修改。

Variable(1) = 10;

但是,我们的编码标准要求使用单点返回。我将如何做到这一点?出于某种原因,以下内容似乎只复制值(因此不返回对根变量的引用),即使我已经验证了单步执行代码,它将 var 设置为适当的变量。 这对于指针来说很简单,但我就是无法获得正确的引用。

MyType_t& Variable(int i) {
    MyType_t& var = MyDefaultVariable;
    if (i == 0) {
        var = MyVariable0;
    }
    if (i == 1) {
        var = MyVariable1;
    }
    return var;
}

注释

返回的变量具有全局范围(在嵌入式系统上)。

该函数用作类内部的便捷方法,用途/范围非常有限。

最佳答案

您的引用绑定(bind)到 MyDefaultVariable,之后您无法修改它,因为它就是这样工作的。您的 var = MyVariable0; 有效地调用了 MyDefaultVariable 的复制运算符,这导致了您观察到的行为。

如果您想避免在此处使用三元运算符,您可以使用接近您建议的内容,但使用稍后在 return 语句中取消引用的指针。

MyType_t& Variable(int i) {
    MyType_t* var = &MyDefaultVariable;
    if (i == 0) {
        var = &MyVariable0;
    }
    if (i == 1) {
        var = &MyVariable1;
    }
    return *var;
}

关于c++ - 如何使用单个 return 语句返回对变量的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52537096/

相关文章:

c++ - 低效率的 std::move()?

c++ - 模板模板总特化

Raspberry Pi 1 B 上的 c++ bass 和 rapidXml

c++ - 浮点格式和 isinf()

c++ - 如何在 Turbo C++ 中将整数作为命令行参数传递

c++ - 引用初始化无效

c++ - C++ 中的嵌套类型

c++ - 查找 3D 空间中 3D 点与定向椭圆之间的距离 (C++)

c++ - 初始化函数指针时出现问题?

c++ - 如何在 Linux 上强制执行 vector 下标超出范围调试断言