[C++11]函数模板的默认模板参数

Posted Wecccccccc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11]函数模板的默认模板参数相关的知识,希望对你有一定的参考价值。

在C++11中添加了对函数模板默认参数的支持。

在这里插入图片描述

代码如下:

#include<iostream>
using namespace std;

template<typename T = long ,typename U = int >
void myTest(T t = 'A',U u = 'B')
{
	cout << "t = " << t << " u = " << u << endl;
}

int main()
{
	myTest('a', 'b');//自动推导,根据传递的实参
	myTest<int>('a', 'b');
	myTest<char>('a', 'b');
	myTest<int, char>('a', 'b');
	myTest<char, int>('a', 'b');
	myTest();
	return 0;
}

测试结果:
在这里插入图片描述

默认的函数参数不能用于类型推导。

代码如下:

#include<iostream>
using namespace std;

template<typename T  ,typename U >
void myTest(T t = 'A',U u = 'B')
{
	cout << "t = " << t << " u = " << u << endl;
}

int main()
{
	myTest();//error
	return 0;
}

类模板可以有默认的模板参数。

代码如下:

#include <iostream>
using namespace std;


template<typename T = int ,T t = 520>
class Test
{
public:
	void print()
	{
		cout << "value = " << t << endl;
	}
};

int main()
{
	Test<> t;//记得写<>
	t.print();
	return 0;
}

测试结果:

在这里插入图片描述

以上是关于[C++11]函数模板的默认模板参数的主要内容,如果未能解决你的问题,请参考以下文章

C++11之模板别名&函数模板的默认模板参数

c++11新特性:变长参数模板详解

Flask模板宏的概念和基本使用

[C++11 模板的改进] --- 可变参数模板

C++11新特性:9—— C++11在函数模板和类模板中使用可变参数

C++11 ——— 可变参数模板