tml*_*len 22 c++ stl coding-style
C++有时使用后缀_type上类型定义(例如std::vector<T>::value_type),有时也被_t(例如std::size_t),或没有后缀(正常的类,并且也像类型定义std::string这是真的std::basic_string<...>)
什么时候使用哪个名称有什么好的约定?
Rei*_*ica 13
正如@MarinaA.的答案正确指出的那样,后缀_t很大程度上是从C继承的(在全局命名空间中 - 为POSIX保留).
这给我们留下了"无后缀"和_type.
请注意,没有名称空间作用域名称std以_type*结尾; 所有这些名称都是类和类模板的成员(或者,在正则表达式相关类型的情况下,是嵌套命名空间的一部分,它主要扮演一个类的角色).我认为这是区别:类型本身不使用_type后缀.
后缀_type仅用于表示类型的成员,而且通常当它们表示对包含类有些"外部"的类型时.比较std::vector<T>::value_type和std::vector<T>::size_type,它们分别来自向量的模板参数T和Allocator对照std::vector<T>::iterator,它是向量类模板的"内在".
*并非完全如此,有几个这样的名字(也评论指出的@jrok): , ,common_type,,underlying_type . 在前三个中,它实际上不是后缀,它是名称的实际部分(例如,给出公共类型或基础类型的元函数).随着和,这的确是一个后缀(因为和是保留字).我会说这是一个类型代表的基于类型的元编程意义上的真/假值.is_literal_typetrue_typefalse_type_typetrue_typefalse_typetruefalse
作为C遗产_t(以前称为" 定义通过 typedef ")语法已被继承(它们在全局命名空间中也是SUS/POSIX保留的).
在C++中添加但在原始C语言中不存在的类型(例如size_type)不需要缩短.
请记住,据我所知,这更像是对既定惯例而非一般规则的观察.