This question already has an answer here:
What is the point of using delete on a non-member function?
(1个答案)
2年前关闭。
这是关于非成员函数的。我将understand this作为实现。但是我对背后的逻辑有些疑惑吗?
如果我不希望使用函数,为什么要声明它然后将其删除?为什么不只是:
如果
谁能想到一个用例,将一个非成员函数声明为Deleted则最好根本不使用它?
更新
已经回答here。虽然。这两个答案都以
如果没有删除第二个重载,那么
(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