C++11的默认模板参数如何支持长尾函数模板?

2026-04-17 00:390阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1119个文字,预计阅读时间需要5分钟。

C++11的默认模板参数如何支持长尾函数模板?

在C++98/03标准中,模板参数默认值仅适用于非类型模板参数,例如模板形参的默认值。对于函数模板,不能为模板参数指定默认值。以下是一个修改后的例子:

C++11的默认模板参数如何支持长尾函数模板?

cpptemplatestruct Foo { // ...};

这段代码在C++98/03中是合法的,其中`U`和`N`是非类型模板参数,可以指定默认值。但如果你尝试为函数模板的模板参数指定默认值,比如:

cpptemplate // 错误:C++98/03不支持函数模板的默认模板参数void func() { // ...}

这会在C++98/03标准中产生错误。

在 C++98/03 标准中,类模板可以有默认的模板参数,如下:

template <typename T, typename U = int, U N = 0> struct Foo { // ... }; 但是却不支持函数的默认模板参数:

template <typename T = int> // error in C++98/03: default template arguments void func() { // ... } 现在这一限制在 C++11 中被解除了。

阅读全文

本文共计1119个文字,预计阅读时间需要5分钟。

C++11的默认模板参数如何支持长尾函数模板?

在C++98/03标准中,模板参数默认值仅适用于非类型模板参数,例如模板形参的默认值。对于函数模板,不能为模板参数指定默认值。以下是一个修改后的例子:

C++11的默认模板参数如何支持长尾函数模板?

cpptemplatestruct Foo { // ...};

这段代码在C++98/03中是合法的,其中`U`和`N`是非类型模板参数,可以指定默认值。但如果你尝试为函数模板的模板参数指定默认值,比如:

cpptemplate // 错误:C++98/03不支持函数模板的默认模板参数void func() { // ...}

这会在C++98/03标准中产生错误。

在 C++98/03 标准中,类模板可以有默认的模板参数,如下:

template <typename T, typename U = int, U N = 0> struct Foo { // ... }; 但是却不支持函数的默认模板参数:

template <typename T = int> // error in C++98/03: default template arguments void func() { // ... } 现在这一限制在 C++11 中被解除了。

阅读全文