读书人

C++已经有了摘引操作符amp;为什么C++11还

发布时间: 2013-07-08 14:13:00 作者: rapoo

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

可是std::bind完全可以用lambda来取代啊
[解决办法]
比如 std::for_each 第三个参数要接受引用时,就必须用 std::ref.
[解决办法]
例如:


template< typename T >
struct Example
{
typedef typename T::ref MyReference;
..............
};


域操作符的操作数必须是id,而&不是id。
[解决办法]
一个只接收值类型的模板,但是想传递一个引用参数给它,这时候就要用std::ref了
[解决办法]
c++ 11 比较失败
[解决办法]
复杂啊。绝对不是一般人可以玩的。
[解决办法]
引用只能被初始化,但是不能重新引用别的对象。
template <class T> class reference_wrapper;
//Class that emulates a reference to an element of type T, but which can be copied (it is both copy-constructible and copy-assignable).


std::ref返回的是reference_wrapper<T>, 不是普通引用。
[解决办法]
1、std::ref通常与模版配合使用,使模版参数推断为引用传递
2、或许是因为std::bind比lambda少几个字?
[解决办法]
似乎很多人有误解
std::ref只是尝试模拟引用传递,并不能真正变成引用,在非模板情况下,std::ref根本没法实现引用传递,只有模板自动推导类型时,ref能用包装类型reference_wrapper来代替原本会被识别的值类型,而reference_wrapper能隐式转换为被引用的值的引用类型

加了这个东西自然有它的用处,如果你不能理解,可能只是你没有碰到需要用它的场合

读书人网 >C++

热点推荐