我想编写类似于下面的类,其中 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/