gpt4 book ai didi

c++ - 使 C++ 中的重载成员访问运算符返回一个临时值

转载 作者:行者123 更新时间:2023-12-01 14:48:51 25 4
gpt4 key购买 nike

我想写类似于下面的类,其中IteratorLike只能取消对新值的引用,因为迭代器提供了与底层结构不同的 View ,这使得返回简单引用不可行。

class IteratorLike
{
public:
MyValue operator*() const { return MyValue(...); }
auto operator->() const { return **this; } // This does not work generally due to member access semantics.
};
总而言之,我只想 IteratorLike()->x(*IteratorLike()).x 意思相同.
可以简单地重载 operator->()MyValue类,但我希望这适用于所有情况。
使用重载 operator->() 的包装器类型似乎是一个合理的解决方案,但是在返回右值时这不起作用。
the example on godbolt是这种包装器的工作实现,包括由于悬空引用而导致的未定义行为。
有没有办法使这项工作?
如果包装器可以返回一个指向纯右值的指针,那么行 int &qa = MyIteratorLike()->x;在我的理解中会被编译器捕获,但这样的事情似乎是不可能的。

最佳答案

Is there a way to make this work?



不。值类别是表达式的属性,而不是类型的属性。 “指向纯右值的指针”不是一回事

关于c++ - 使 C++ 中的重载成员访问运算符返回一个临时值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59896703/

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