首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么要删除一个非成员函数?

为什么要删除一个非成员函数?
EN

Stack Overflow用户
提问于 2018-08-04 14:46:51
回答 1查看 355关注 0票数 8

这是关于非成员函数的。我将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在对他的答案的评论中所说的那样,讨论其他用例也是相当有益的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-04 15:53:58

删除非成员函数可用于禁用具有某些参数的函数。例如,下面是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)将是一个有效的表达式(因为可以将临时表达式绑定到常量引用)。这是一个问题,因为cref会返回一个将被销毁的对象的引用。要禁止这种情况,我们需要删除传递了临时cref的函数,这就是第二个已删除重载所做的事情。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51683221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档