首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么optional<T&>要在赋值时重新绑定?

为什么optional<T&>要在赋值时重新绑定?
EN

Stack Overflow用户
提问于 2016-10-12 02:42:24
回答 1查看 484关注 0票数 16

关于optionalvariant应该如何处理引用类型,特别是关于赋值,有一个持续不断的争论。我想更好地理解围绕这个问题的辩论。

optional<T&> opt;
opt = i;
opt = j; // should this rebind or do i=j?

opt = j应该重新绑定底层引用的理由是什么?换句话说,为什么我们要像这样实现optional

template <class T>
struct optional<T&> {
    T* ptr = nullptr;

    optional& operator=(T& rhs) {
        ptr = &rhs;
        return *this;
    }
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-12 03:18:59

应该重新绑定底层引用的参数是什么?

我不知道你要找的“论点”是什么。但你刚刚提出了一个“论点”:

optional<T&> opt;
opt = i;
opt = j;

现在,假设第二行和第三行彼此相距很远。如果你只是在读代码,你希望opt = j做什么?或者更重要的是,您为什么期望它的行为与opt = i不同

仅仅基于包装器类型的当前状态,包装器类型的行为会有如此巨大的差异,这将是非常令人惊讶的。

此外,我们已经有了一种方法来传达您想要更改optional中的值。即:*opt = j。这对optional<T&>和对optional<T>一样有效。

optional的工作方式非常简单:它是一个包装器类型。就像当前存在的任何包装器类型一样,对它们的操作会影响包装器,而不是被包装的东西。要影响被包装的东西,可以显式地使用*->或其他一些接口函数。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39984443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档