速写c++范性
template<typename/class T>声明下一个域存在范型
Q:范型/模版,意味着什么?
A: 类模版意味着类实体将生成、函数模版意味着将发生类型推导和实体生成
Q:template<class T>
void f(T&&)为什么可以接受任何类型的实参?不应该只接受右值吗?
A:当发生类型推导时,以上式f(arg)为例:
arg = 左值/左值引用 则 T = T& ,而 T& && = T&
arg = 右值/右值引用 则 T = T,故仍为T&&
总之就是,实参为左,形参为左值引用、实参为右、形参为右值引用(但不要忘了右值引用也是左值哦)
我们编写模版时希望T被推导为引用类型,因为引用几乎总是比拷贝高效
Q:remove_reference<T>是什么操作?
A:是type_traits头文件里面一些模版,它们帮助我们获得一些编译期的信息
Q:为什么要使用右值引用作为模版参数呢?
A:为了实现完美转发
Q:扩展参数包中的...是啥?
A:就是扩展符