std 命名空间中的专用模板
用户可以向 std 命名空间添加显式专业化,但某些模板是禁止的。这些限制确保标准库的行为保持一致且定义良好。
禁止的特化:
根据 C 标准,以下模板不能特化:
-
numeric_limits: 禁止使用非算术标准类型(例如,complex
-
shared_ptr:
专业化必须可 CopyConstructible、CopyAssignable、LessThanComparable,并可转换为 bool。-
weak_ptr:
专业化必须是 CopyConstructible 和 CopyAssignable。-
hash:
专业化必须满足类模板哈希的要求。-
中的类模板:
如果为这些模板添加专门化,则程序行为未定义。-
复杂:
对于 float、double 或 long double 以外的类型未定义。-
原子:
特化必须具有删除的复制构造函数、复制赋值运算符和 constexpr 值构造函数。- 一元函数和二元函数:
已弃用,不应专门化。
其他限制:
此外,该标准禁止以下:
- 在不满足特定要求的情况下向 std 命名空间或任何子命名空间添加声明或定义。
- 标准库类的成员函数或成员模板的显式特化。
- 标准库类的成员类模板的显式或部分特化。
允许的特化:
仅在以下情况下才允许模板特化:
- 它们依赖于用户定义的类型。
- 它们遵守原始模板的标准库要求。
- 如上所述,它们没有被明确禁止。
通过遵循这些限制,程序员可以确保 std 命名空间和标准库作为一个整体的完整性和可预测性。
以上是您可以专门化“std”命名空间中的每个模板吗?的详细内容。更多信息请关注PHP中文网其他相关文章!