了解如何声明模板参数的默认值

Understanding how the default values of template parameters are declared

本文关键字:参数 默认值 声明 何声明 了解      更新时间:2023-10-16

在std :: basic_string文档中找到,网址为http://en.cppreference.com/w/cpp/string/basic_string,basic_string类称为如下。

template<
    class CharT,
    class Traits = std::char_traits<CharT>,
    class Allocator = std::allocator<CharT>
> class basic_string;

但是,在GCC和Visual Studio中,在类声明中未指定性状和分配模板参数的默认值。

以下内容来自basic_string.h,来自gcc 4.9.2。

template<
    typename _CharT,
    typename _Traits,
    typename _Alloc
> class basic_string

请注意,_traits和_Alloc模板参数缺乏默认值。

我缺少什么?

这些类通常在百万个地方 1 中声明。这些声明中只有一个会带有默认参数,因为这是一个错误。

对于basic_string,在libstdc 中,默认参数在bits/stringfwd.h中的向前声明中找到(<string>包括在内,除其他外):

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
           typename _Alloc = allocator<_CharT> >
    class basic_string;

1 不要从字面上拍摄。

在Visual Studio中,它在专业化之前以<xstring>的方式定义:

template<class _Elem,
    class _Traits = char_traits<_Elem>,
    class _Ax = allocator<_Elem> >
    class basic_string;

"正常"字符串类型将在 std::string的typedef中定义:

typedef basic_string<char, char_traits<char>, allocator<char> >
    string;
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >
    wstring;