C++
泛编程,也叫通用编程。包括三方面内容: 自动推导类型
、 函数模板
、 类模板
。
自动推导类型
在C++11
中,赋予了auto
全新的含义,不再用于修饰变量,而是作为一个类型指示符
,指示编译器在编译时推导auto声明的变量的数据类型。
语法:auto 变量名 = 初始值
#include <iostream>
using namespace std;
int main() {
int n1 = 123; cout << "n1 = " << n1 << endl;
auto n2 = 123; cout << "n2 = " << n2 << endl;
double d1 = 123.456; cout << "d1 = " << d1 << endl;
auto d2 = 123.456; cout << "d2 = " << d2 << endl;
string s1 = "Hello, World!"; cout << "s1 = " << s1 << endl;
auto s2 = "Hello, World!"; cout << "s2 = " << s2 << endl;
return 0;
}
编译器会根据等号右边的数据,自动推导出变量的数据类型。编译运行结果如下:
n1 = 123
n2 = 123
d1 = 123.456
d2 = 123.456
s1 = Hello, World!
s2 = Hello, World!
注意:
auto
声明的变量必须在定义时初始化
。没有定义的话,那什么来推导?- 初始化的右值可以是
具体的数值
,也可以是表达式
和函数返回值
等。 auto
不能作为函数的形参类型。auto
不能直接声明数组。auto
不能定义类的非静态成员变量。
#include <iostream> // 包含头文件。
using namespace std; // 指定缺省的命名空间。
double func(double n1, const char* n2, float n3, short n4, long n5)
{
cout << "n1 = " << n1 << ", n2 = " << n2 << ", n3 = " << n3 << ", n4 = " << n4 << ", n5 = " << n5 << endl;
return 1.2345;
}
int main()
{
// 声明函数指针 方法1
double (*pf_1)( double , const char* , float , short , long ); // 声明函数指针pf。
pf_1 = func; // 函数指针pf指向func函数
pf_1(1.2345, "abcd", 3, 4, 5);
// 声明函数指针 方法2
auto pf_2 = func;
pf_2(2.222, "aaaaa", 222, 222, 222);
}
编译运行结果如下:
n1 = 1.2345, n2 = abcd, n3 = 3, n4 = 4, n5 = 5
n1 = 2.222, n2 = aaaaa, n3 = 222, n4 = 222, n5 = 222
不要滥用auto
,auto
在编程时真正的用途
如下:
- 代替
冗长复杂
的变量声明(两种方法声明函数指针,方法2代码少) - 在模板中,用于声明依赖模板参数的变量。
- 函数模板依赖模板参数的返回值
- 用于lambda表达式中
函数模板
链接:C++ 泛编程 —— 函数模版(上)
链接:C++ 泛编程 —— 函数模版(中)
链接:C++ 泛编程 —— 函数模版(下)
模板类
链接:C++ 泛编程 —— 模板类(基本概念)
链接:C++ 泛编程 —— 模板类的示例(栈)
链接:C++ 泛编程 —— 模板类的示例(数组)
未完待续
感谢浏览,一起学习!