【发布时间】:2022-06-15 05:17:34
【问题描述】:
假设我有一个类对象必须在从函数调用返回该类的对象时被调用者捕获。
// no_can_rvalue *must* be captured
[[nodiscard]] no_can_rvalue a_func();
我可以通过删除所有右值函数重载来强制执行此操作,这样就无法使用类功能,除非调用者捕获了它的对象(在 c++17 中与 nodiscard 加倍)。
是否可以一举删除给定类的所有右值函数重载?
结果等价于:
struct no_can_rvalue {
void f() && = delete;
void f() &;
void g() && = delete;
void g() &;
// etc
};
【问题讨论】:
-
请注意,对于
const函数,您只需要&& = delete。对于非常量函数,在主重载上添加&就足够了。 -
@HolyBlackCat ty 我不知道!
-
用例是什么?
-
@JeffGarrett 您必须捕获该事物,因为它返回指向自身的迭代器。又名,你不能
for (auto v : m.get_no_can_rvalue())。在这种特定情况下,这也是一个性能问题。
标签: c++ overloading delete-operator rvalue