【C++ Primer 第16章】2. 模板实参推断

模板实参推断:对于函数模板,编译器利用调用中的函数实参来确定模板参数,从函数实参来确定模板参数的过程被称为模板实参推断。

类型转换与模板类型参数

与往常一样,顶层const无论在形参中还是在是实参中,都被会忽略。

• const转换:可以将一个非const对象的引用(或指针)传递给const的引用(或指针)形参。

• 数组或函数指针转换:一个数组实参可以转换为一个指向其首元素的指针。类似的,一个函数实参可以抓转换一个该函数类型的指针。

 1 template <typename T> T fobj(T, T)  //实参被拷贝
 2 template <typename T> T fret(const T&, const T&) //引用
 3
 4 string s1("a value");
 5 const strng s2("another value");
 6 fobj(s1, s2);    //调用fobj(string, string); const被忽略
 7 fret(s1, s2);    //调用fret(const string&, const string&); const被忽略
 8
 9 int a[10], b[42];
10 fobj(a, b);       //调用fobj(int*, int*);
11 fret(a, b);       //错误

原文地址:https://www.cnblogs.com/sunbines/p/9082535.html

时间: 2024-08-24 01:11:03

【C++ Primer 第16章】2. 模板实参推断的相关文章

模板与泛型编程——模板实参推断

一.模板实参推断 对于函数模板,编译器利用调用中的函数实参来确定其模板参数.从函数实参来确定模板实参的过程被称为模板实参推断.在模板实参推断过程中,编译器使用函数调用中的实参类型来寻找模板实参,用这些模板实参生成的函数与给定的函数调用最为匹配. 1.类型转换与模板类型参数 与非模板函数一样,我们在一次调用中传递给函数模板的实参被用来初始化函数的形参.如果一个函数形参的类型使用了模板类型参数,那么它采用特殊的初始化规则.只有很有限的几种类型转换会自动地应用于这些实参.编译器通常不是对实参进行类型转

C++模板实参推断

1 类型转换与模板实参 1)自动转换的只有:const转换, 数组及函数到指针的转换 注:不同大小相同元素类型是不同的类型 2)相同模板参数名对应的实参类型必须相同 3)不同模板参数名对应的实参类型可以不同,但必须兼容 2 函数模板的返回值问题 函数模板只会对函数参数列表的类型进行推断不会对返回值推断 解决方法: 1) 显示模板参数 注: 显示指定了模板类型参数在类型转换上和普通函数参数一样 template <typename T1, typename T2, typename T3> T1

C++ primer-&gt;16.2 模板实参推断

一.类型转换与模板类型参数 1.如果一个函数形参的类型使用了模板类型参数,那么它采用特殊的初始化规则.只有很有限的几种类型转换会自动地应用于这些实参. ①.顶层const无论是在形参中还是在实参中,都会被忽略. ②.const转换:可以将一个非const对象的引用(或指针)传递给一个const的引用(或指针)形参. ③.数组或函数指针转换:如果函数形参不是引用类型,则可以将对数组或函数类型的实参应用于正常的指针转换. 如下程序所示: 1 template<typename T> T fobj(

C++学习笔记(4)----模板实参推断

1. 如图所示代码,模板函数 compare(const T&, const T&) 要求两个参数类型要一样. compare("bye","dad") 调用,将模板参数推断为 const char[4] (因为还有一个 NULL 字符串结尾),而且两个参数都为 const char[4],所以可以正常实例化模板函数. 而 compare("hi","world") 调用,将两个模板参数本别推断为 const

第16章 模板与泛型编程

16.1.1函数模板 //template parameter list template<typename T1,typename T2> int compare(const T1& v1, const T2&v2) { if (v1 < v2) return -1; if (v2 < v1) return 1; return 0; } When we call a function template, the compiler (ordinarily) uses

[014]模板-模板实参推导

对于函数模板,编译器利用调用中的函数实参来确定其函数模板,从函数实参来确定模板实参的过程就被叫做是模板实参推导. 比如: 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 template <class T> 6 int compare(const T &v1, const T &v2) { 7 if (v1 > v2) { 8 cout << &quo

C++ Primer Plus 第六版 第16章 string类和标准模板库

1.string实际上是模板具体化basic_string<char> 的一个typedef,有默认参数,所以省略了初始化参数 2.size_type是一个依赖于实现的整形 string将string::npos定义为字符串的最大长度 3.string类的构造函数P656 4.对于c-风格字符串,3种输入方法:cin>>   cin.getline(),cin.get 对于string   ,2种输入方法:cin>>,getline(cin,string对象) 5.st

C++ primer plus读书笔记——第16章 string类和标准模板库

第16章 string类和标准模板库 1. string容易被忽略的构造函数: string(size_type n, char c)长度为n,每个字母都为c string(const string & str, size_type pos = 0, size_type n = pos)初始化为str中从pos开始到结尾的字符,或从pos开始的n个字符 string(const char *s, size_type n)初始化为s指向的前n个字符,即使超过了s的结尾: string(Iter b

《C++ Primer Plus》16.3 标准模板库 学习笔记

STL提供了一组表示容器.迭代其.函数对象和算法的模板.容器是一个与数组类似的单元,可以存储若干个值.STL容器是同质的,即存储的值的类型相同:算法是完成特定任务(如对数组进行排序或在链表中查找特定值)的处方:迭代其能够用来遍历容器的对象,与能够便利数组的指针类似,是广义指针:函数对象是类似于函数的对象,可以使类对象或函数指针(包括函数名,因为函数名被用作指针).STL使得能够构造各种容器(包括数组.队列和链表)和执行各种操作(包括搜索.排序和随机排列).Alex Stepanov和Meng L