Chinaunix

标题: C++已经有了引用操作符&,为什么C++11还要引入std::ref? [打印本页]

作者: ejeker    时间: 2013-07-05 06:27
标题: C++已经有了引用操作符&,为什么C++11还要引入std::ref?
有什么情况是&符号不能处理的,必须要std::ref才能清楚的表达语义呢? 除了在std::bind里面用到之外?

可是std::bind完全可以用lambda来取代啊
作者: 幻の上帝    时间: 2013-07-05 06:27
有指针了为什么还要有引用呢……
不限bind,反正要用到左值又不想传值的就塞个reference_wrapper过去。光用指针不保证能分清到底要传指针还是指针指向的东西——比如拿来初始化iterator adaptor。

作者: linggang_123    时间: 2013-07-05 08:53
c++不懂。。。。。。帮顶。。
作者: myworkstation    时间: 2013-07-05 11:18
用lambda是可以取代bind,但lambda也不是适用于所有场景的,只有要功能不太复杂,代码量不大时才适合用lambda,否则就要写成常规的函数了,而此时如果希望使用这个函数进行适配的话就会需要bind,接下来如果希望保存这个适配的bind的结果就需要function对象了,当然可以使用auto,但在需要明确类型检查时依然还需要function对象。由于bind在调用进行参数绑定时仅使用传值方式,所以如果调用函数原型本身有引用参数那么必须使用ref或cref(const ref)进行参数绑定。
作者: ejeker    时间: 2013-07-05 12:48
myworkstation 发表于 2013-07-05 11:18
用lambda是可以取代bind,但lambda也不是适用于所有场景的,只有要功能不太复杂,代码量不大时才适合用lambd ...


适配仍然可以lambda呀
作者: ejeker    时间: 2013-07-05 14:34
幻の上帝 发表于 2013-07-05 13:27
有指针了为什么还要有引用呢……
不限bind,反正要用到左值又不想传值的就塞个reference_wrapper过去。光用 ...


关于左值的这个说法让我醍醐灌顶,瞬间清晰了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2