关于库实现

时间:2014-05-13 17:04:30

标签: c++

当我读这本书特别的c ++时,下面的句子引起了我的困惑: " ...因为允许库实现添加他们自己的额外模板参数(超出标准要求的那些),当然,你的代码不会知道 - 一个主要的规则的原因是程序员不能在命名空间std中为事物编写自己的声明。"

那么当它说添加他们自己无法看到的额外模板参数时意味着什么呢?

这就是我只看到

的原因
typedef basic_string<char>    string;  

在qt std :: string实现中但未指定_Traits模板变量。但是,文件中的注释表示_Traits的默认值是char_Traits。我搜索整个文件但仍未找到库如何设置_traits变量的默认值。所以我想知道这与导致我混淆的句子有关吗?

1 个答案:

答案 0 :(得分:4)

标准库的实现必须提供标准中描述的功能,但它们可以添加扩展。当然,这些扩展不得与仅考虑标准的程序冲突。换句话说,标准是必须达到的下限。

现在,关于您对std::string的疑惑,这被定义为std::basic_string<char>。但是,basic_string类模板具有多个模板参数,但对于其他参数,则存在默认值(而后者依赖于第一个参数)。我很确定你可以找到它们,即使这不是很容易,因为典型的库代码不是以可读性编写的,而是标准的一致性(这是许多_Foo名称的原因)。