c++ - “模板“什么=是什么意思?
问题描述
当我看到 stl 源代码时,我看到一些代码,我无法理解?
template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
class vector : protected _Vector_base<_Tp, _Alloc>
{
// requirements:
__STL_CLASS_REQUIRES(_Tp, _Assignable);
....
}
所以,问题是=
in 是什么意思template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
?
=
我可以像使用关键字一样理解吗:
using _Alloc = class __STL_DEFAULT_ALLOCATOR(_Tp)
解决方案
=
指示默认模板参数。
例如
template <class Foo = std::string>
class Bar
意思是“std::string
如果没有提供参数就使用。你可以这样使用Bar
:
Bar b;
这将等于
Bar<std::string> b;
在你的情况下,
template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
class vector
方法
默认情况下,
__STL_DEFAULT_ALLOCATOR(_TP)
如果没有指定其他内容,则使用
允许你写
vector<int> v;
而不必写
vector<int, __STL_DEFAULT_ALLOCATOR(int)> v;
这将更加冗长。
有关更多详细信息,请参阅此答案。
推荐阅读
- docker - Nexus 存储库构建新容器
- swift - 通过传入的值更新 SwiftUI @State 变量不起作用?(附代码)
- python - jupyter notebook 找不到 -lpthread 和 -lc
- mysql - 如何在触发器中循环所有列名称而不对其进行硬编码
- c# - 如何将命令发送到部署在 Kubernetes 上的特定 pod?
- bash - 使用 i3 bindsym 和 xdotool 无限循环按键
- node.js - 团队机器人,如何动态配置消息传递端点?
- javascript - 使用服务人员的 Firefox 中可兑现文件的限制?
- dask - Dask 字符串连接聚合
- python - 您可以扫描目录以查找文件名以发现它是什么类型的文件吗?