C++ 泛编程—— 自动推导类型 auto

发布于:2024-12-18 ⋅ 阅读:(76) ⋅ 点赞:(0)

C++ 自动推导类型 auto


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

不要滥用autoauto在编程时真正的用途如下:

  • 代替冗长复杂的变量声明(两种方法声明函数指针,方法2代码少)
  • 在模板中,用于声明依赖模板参数的变量。
  • 函数模板依赖模板参数的返回值
  • 用于lambda表达式中

函数模板

链接:C++ 泛编程 —— 函数模版(上)
链接:C++ 泛编程 —— 函数模版(中)
链接:C++ 泛编程 —— 函数模版(下)

模板类

链接:C++ 泛编程 —— 模板类(基本概念)
链接:C++ 泛编程 —— 模板类的示例(栈)
链接:C++ 泛编程 —— 模板类的示例(数组)
未完待续

感谢浏览,一起学习!


网站公告

今日签到

点亮在社区的每一天
去签到