Ral*_*zky 10 c++ tuples c++11 reference-wrapper
在C++ 11标准中,它指出(参见cppreference.com,另见标准的第20.4.2.4节)它指出
template< class... Types >
tuple<VTypes...> make_tuple( Types&&... args );
Run Code Online (Sandbox Code Playgroud)
创建一个元组对象,从参数类型中推导出目标类型.
对于每一个
Ti
在Types...
时,相应的类型Vi
中Vtypes...
是std::decay<Ti>::type
除非的应用std::decay
在结果中std::reference_wrapper<X>
为某种类型的X
,在这种情况下,推定的类型是X&
.
我想知道:为什么参考包装器在这里处理特殊?
R. *_*des 11
这或多或少是主要目的reference_wrapper
.
通常,std::make_tuple
总是生成值的元组(std::decay
模拟按值传递语义).给出int x, y; std::make_tuple(x, y);
了一个std::tuple<int, int>
,尽管它会被推断Types
为一组参考文献int&, int&
.std::decay
转换为int, int
.
reference_wrapper
允许你强制创建引用元组:std::make_tuple(std::ref(x), y)
将创建一个std::tuple<int&, int>
.
标准库的其他部分reference_wrapper
以相同的方式使用.例如,std::bind
通常会将绑定参数复制/移动到结果对象中,但如果您希望它只存储引用,则可以通过传递一个来显式请求它reference_wrapper
.