在http://en.cppreference.com/w/cpp/string/basic_string找到的std :: basic_string文档中,basic_string类声明如下。
template<
class CharT,
class Traits = std::char_traits<CharT>,
class Allocator = std::allocator<CharT>
> class basic_string;
但是,在GCC和Visual Studio中,Traits和Allocator模板参数的默认值未在类声明中指定。
以下内容来自GCC 4.9.2的basic_string.h。
template<
typename _CharT,
typename _Traits,
typename _Alloc
> class basic_string
请注意_Traits和_Alloc模板参数缺少默认值。
我错过了什么?
答案 0 :(得分:10)
这些类通常在百万个地方 1 中声明。这些声明中只有一个会带有默认参数,否则会出错。
对于basic_string
,在libstdc ++中,默认参数可以在bits/stringfwd.h
中的转发声明中找到(<string>
包含在其中):
template<typename _CharT, typename _Traits = char_traits<_CharT>,
typename _Alloc = allocator<_CharT> >
class basic_string;
1 不要按字面意思理解。
答案 1 :(得分:2)
在视觉工作室中,它在专业化之前以<xstring>
方式定义:
template<class _Elem,
class _Traits = char_traits<_Elem>,
class _Ax = allocator<_Elem> >
class basic_string;
&#34;正常&#34;字符串类型稍后在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;