C++模板实参推断
来源:互联网 发布:卖商品的淘宝店铺名字 编辑:程序博客网 时间:2024/04/30 19:45
1 类型转换与模板实参
1)自动转换的只有:const转换, 数组及函数到指针的转换
注:不同大小相同元素的数组是不同的类型
2)相同模板参数名对应的实参类型必须相同
3)不同模板参数名对应的实参类型可以不同,但必须兼容
2 函数模板的返回值问题
函数模板只会对函数参数列表的类型进行推断不会对返回值推断
解决方法:
1) 显示模板参数
注: 显示指定了模板类型参数在类型转换上和普通函数参数一样
template <typename T1, typename T2, typename T3>
T1 alternative_sum(T2, T3)
------------------------------------------------------------------------------
auto v = alternative_sum<int>(i, j);
v为int
2) 尾置返回类型
template <typename It>
auto fcn(It first, It larst) -> decltype(*first)
{
return *first;
}
注:对迭代器的decltype运算符返回的只能是对象的引用,不能是值.
可以借助remove_reference<decltype(*first)>::type
3 函数指针与实参推断
程序上下文必须满足:对每个模板参数能唯一确定起类型或值
4 引用与模板实参推断
1) 左值引用
T& ---> 实参必须是一个左值
f1(i) i(int) T int
f1(ci) ci (const int) T const int
f1(5) 错误,不是左值
const T& ---> 实参可以是对象(const或非const), 临时对象, 或字面值常量
注:当函数实参是const时, T将不是const类型
f2(i) i(int) T int
f2(ci) ci (const int) T int
f2(5) 5是右值 T int
注: const参数可以绑定到一个右值
2) 右值引用
T&&
------出入实参 T
左值 左值引用
右值 对象类型
左值引用 左值引用
右值引用 右值引用
引用折叠只能用于间接创建的引用的引用.
右指引用的常用用途:1) 模板转发, 模板重载
5 std::move原理
template <typename T>
typename remove_reference<T>::type&& move(T&& t){
reurn static_cast<typename remove_reference<T>::type&&>(t);
}
注:将一个左值static_cast转到一个右值引用是允许的.
6 转发std::forward
forward<T> 返回类型是T&&
- C++:模板实参推断及引用折叠
- 模板实参推断
- 模板实参推断
- 模板实参推断
- 模板实参推断
- 模板实参推断
- C++模板实参推断
- 模板实参推断
- C++primer学习:模板编成(5):模板实参推断{1}
- 模板实参推断与引用
- C++primer阅读笔记-模板与泛型编程(模板实参推断)
- C++primer学习:模板编程(6):模板实参推断和forward的运用与源代码
- 模板实参推断与函数指针
- 模板实参推断与函数指针
- 模板与泛型编程之模板实参推断
- 模板实参推断与函数指针的一些事
- C++学习笔记58——模板实参推断
- 模板实参推断和引用以及move和forward详解
- eclipse 错误failed to load the jni shared library C:program files/java/ server/jvm.dll
- js调用后台,后台调用前台等方法总结
- UINavigationController
- C++强制类型转换方法
- 黑马程序员---Java 数组(三)
- C++模板实参推断
- leetcode-- 动态规划 dynamic programming
- CSS3 transition 属性
- 23从上往下打印二叉树
- ios开发小技巧
- RSA加密算法
- 大数据 之 NoSQL
- 新建cocos2dx开发遇到问题及解决办法
- 创建文件,并格式化输出最后修改时间