2017-06-14 50 views
1

引用说std::function::operator()const。这个常量适用于什么?如果std::function是可调用对象的包装,则此常量是否适用于此对象(也就是说它的operator()也应该是const?)。C++:什么是std :: function constness的语义?

总体而言,std::function对于不同类型的目标(lambda,函数指针,对象,成员函数等)是什么意思?

回答

0

这是一个错误。根据规范,由于从非const引用调用目标对象,因此实际上没有什么是const

未来版本的标准库将从呼叫运营商删除const。用户将能够专门请求const呼叫使用专业化,如std::function<return_type(arg_type) const>

查看标准提案P0045。 (披露:我是作者。)

+0

感谢您澄清'operator()'。你能回答问题的第二部分吗?例如,当我通过const引用传递'std :: function'时,这个常量是什么意思? –

+1

@DmitryJ目前,所有'const'语义都没有意义,因为调用操作符会抛出它(就像'const_cast'一样)。一旦库bug的问题得到解决,例如我的提议,那么一个普通的'std :: function '甚至不会被'const'引用调用。 – Potatoswatter

+0

@Potatoswatter昨天当我不得不处理一个const std :: function并开始想知道如果调用操作符是const意味着,绑定对象/ member-func也必须是const时,我有完全相同的问题。答案是没有必要,但我推论这是因为常量只适用于std :: function的状态,但如果绑定对象存储为成员变量,那么我猜它所调用的成员func也必须是const ? – ForeverLearning

相关问题