如果您的团队同意一组别名,则使用类型别名进行STL容器不良练习

Is using type aliases for STL Containers bad practice if your team agrees upon a set of aliases?

本文关键字:别名 类型 STL 练习 不良 团队 如果 一组      更新时间:2023-10-16

这样做这样的事情以保护代码免受太多的std ::'s?

有什么问题
// These underscore_cased type aliases make my code shorter and easier to read for me. 
// For Example:
template<class T> using v=std::vector<T>;
template<class T, class U> using u_m=std::unordered_map<T,U>;
template<class T> using p_q=std::priority_queue<T>;
template<class T,class U> using u_mm=unordered_multimap<T,U>;

还是这种风险行为?

我看不出这会如何污染我的名称空间,就像使用名称空间std一样。

这样做:

  1. 使您的代码更难阅读。

  2. vecu_m

c 是合理的简洁。我的建议是习惯std::

不过,usingtypedefclass的范围内没有错。甚至可以有用;允许您更改定义的组件而无需更改依赖代码。

我对您建议的名称的主要关注点是,当您尝试将它们用作变量名称时,它们会导致意外错误。拥有称为vec的本地变量是非常标准的东西。

请注意,这种问题通常仅由于命名惯例而避免:例如,在大多数C 代码库中,类型以大写字母开头,是CamelCased,而本地变量以小写字母开头(这也是如何stackoverflow上的语法突出显示btw(。std名称遵循不同的惯例,这通常不是一个问题,因为它们处于自己的命名空间中。您不能命名变量std::vector

基本上,您建议的别名与此破坏,并打开所有令人讨厌的问题和"不阅读",这些约定应该消除。

由Bjarne Stroustrup和Herb Sutter撰写的CPPCoreGuidlines有一个有关此标题的指南:
使用模板别名简化符号并隐藏实现详细信息。

给出的原因是:

提高了可读性。实施隐藏。请注意,模板别名取代了特征的许多用途来计算一种类型。它们也可以用来包裹特质。

请注意,本指南中给出的示例不在全球名称空间中。

但是,您还应该确保根据其他指南可能影响性能的此类别名。