This question already has an answer here:
What is the point of using delete on a non-member function?

(1个答案)


2年前关闭。




这是关于非成员函数的。我将understand this作为实现。但是我对背后的逻辑有些疑惑吗?
     // why this?
     void do_not_use_this_ever ( void ) = delete ;

如果我不希望使用函数,为什么要声明它然后将其删除?为什么不只是:
     // why not this?
     // void do_not_use_this_ever ( void ) = delete ;

如果= delete声明了一个意图,则仅像上面的注释那样声明相同的意图。

谁能想到一个用例,将一个非成员函数声明为Deleted则最好根本不使用它?

更新

已经回答here。虽然。这两个答案都以std::cref为例。正如@geza在对他的答案的评论中所说的那样,讨论其他用例也将是非常有益的。

最佳答案

删除非成员函数对于禁用带有某些参数的函数很有用。例如,这是std::cref:

template< class T >
std::reference_wrapper<const T> cref( const T& t ) noexcept;
template <class T>
void cref(const T&&) = delete;
cref用于将对象引用转换为reference_wrapper。例如,这可以与std::bind一起使用:std::bind参数被复制到结果对象中。但是,使用cref,它仅用作引用。因此,cref不能与临时参数一起使用。

如果没有删除第二个重载,那么cref(2)将是一个有效的表达式(因为可以将临时绑定(bind)到const引用)。这是一个问题,因为cref将返回对将被销毁的对象的引用。为了避免这种情况,我们需要删除临时传递了cref的函数,这就是第二个删除的重载的作用。

关于c++ - 为什么要删除非成员函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51683221/

10-11 15:33