C函数将重复参数绑定到curried函数

C函数将重复参数绑定到curried函数,第1张

概述我试图理解currying和调用一个函数的概念,该函数连接三个字符串,但只传递两个字符串并使用第二个参数两次. 但是,当我这样做时,第二个参数根本没有被发送到函数,它打印出一个空字符串.这是一个非常明显的错误吗? string concatthreestrings(string a,string b,string c){ cout<<"Value of A: "<<a<<endl; 我试图理解currying和调用一个函数的概念,该函数连接三个字符串,但只传递两个字符串并使用第二个参数两次.

但是,当我这样做时,第二个参数根本没有被发送到函数,它打印出一个空字符串.这是一个非常明显的错误吗?

string concatthreestrings(string a,string b,string c){    cout<<"Value of A: "<<a<<endl;    cout<<"Value of B: "<<b<<endl;    cout<<"Value of C: "<<c<<endl;    return a+b+c;}int main(){    typedef std::function< string( string,string) > fun_t ;    using namespace std::placeholders;    fun_t fn = std::bind( concatthreestrings,_1,_2,_2);    cout<<endl<<fn( "First","Second")<<endl;}

这是给出以下输出.不使用_2两次意味着第二个和第三个都传递第二个参数.如果在其位置使用字符串,其工作正常.

解决方法 复制字符串很昂贵.由于std :: bind认为占位符的值仅使用一次,因此它对字符串执行std :: move.这是针对每个参数完成的,因此,b或c是移动的,这意味着空字符串.

您可以通过使用const-reference传递参数来明确说出您的意思来更改该行为:

string concatthreestrings(string const& a,string const& b,string const& c)

现在,它应该工作.

总结

以上是内存溢出为你收集整理的C函数将重复参数绑定到curried函数全部内容,希望文章能够帮你解决C函数将重复参数绑定到curried函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1238710.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存