C++ 如果您的团队同意使用一组别名,那么对STL容器使用类型别名是否是一种不好的做法?

C++ 如果您的团队同意使用一组别名,那么对STL容器使用类型别名是否是一种不好的做法?,c++,C++,做这样的事情来保护代码不受太多std::,有什么不对吗 // 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<

做这样的事情来保护代码不受太多std::,有什么不对吗

// 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>;
//这些下划线大小写的类型别名使我的代码更短,更易于阅读。
//例如:
使用v=std::vector的模板;
使用u_m=std::无序的u映射的模板;
使用p_q=std::priority_队列的模板;
使用u_mm=无序的u多重映射的模板;
还是这种行为有风险

我不认为这会像使用namespace std那样污染我的命名空间。

这样做:

  • 使您的代码更难阅读

  • vec
    u_m
    污染名称空间(可能是全局名称空间)

  • C++相当简洁。我的建议是习惯
    std::


    不过,在
    的范围内使用
    typedef
    并没有什么问题。这甚至是有用的;允许您在不必更改依赖代码的情况下更改定义的组件。

    由比亚恩·斯特劳斯特鲁普和赫伯·萨特编写的CppCoreGuidlines有一个关于此的指南:

    理由是:

    提高可读性。实现隐藏。请注意,模板别名取代了计算类型时对特征的许多使用。它们也可以用来包装一个特征

    请注意,本指南下给出的示例不在全局命名空间中


    但是,您还应该确保这些别名不是多余的,因为它们可能会影响其他别名的性能。

    我对您建议的名称的主要担忧是,当您尝试将它们用作变量名时,它们会导致意外错误。拥有一个名为
    vec
    的局部变量是相当标准的东西

    注意,这种问题通常是由于命名约定而避免的:例如,在大多数C++代码库中,类型以大写字母开头,并且是 CAMELCASID,而局部变量以小写字母开头(这也是StAcExcel中的语法高亮工作BTW的方式)。

    std
    名称遵循不同的约定并不常见,因为它们位于自己的名称空间中。不能命名变量
    std::vector


    基本上,您建议的别名与此相冲突,并使您面临这些约定本应消除的所有恼人问题和“不可理解性”。

    假设我的团队和我发现std::vector比vec更难阅读。你能举个例子说明名称空间污染是一个问题吗?@user3586940:有趣的是,一些志同道合的特质可能有着几乎相同的想法,而你最终使用了他们的一些代码,那么你就有了所有冲突的根源。@KonradRudolph:Feelin'更好;-)@KonradRudolph:但还是忍不住在降价中从0开始计算。@user3586940:这有点像是个问题,不是吗?这会让新手更难知道别名。使用std::vector,您可能还有一些合适的
    位于您的cpp顶部,以避免使用前缀
    std::
    。在任何代码中都不应找到像“u_m”这样的无意义名称。在@Jarod42注释之后,在cpp文件顶部使用
    可以避免使用许多
    std
    u_m
    是一个我觉得对变量毫无意义的名称,更不用说对类型了。我指的是@Jarod42建议的
    使用
    ,而不是
    使用名称空间std
    指南是一个通用的。我不知道OP想要使用这些别名的所有变体/范围。不管怎样,我已经提到了指南中给出的示例不在全局名称空间中。我更新了问题并对您的答案进行了更新,尽管关于camelCasing的部分现在已经修复。您还看到问题了吗?@user3586940您在使用
    时引入的标识符仍然是类型(或者准确地说是类型别名),因此它们应该以大写字母开头。然而,一旦你们这样做了,我就不会对你们的想法有异议了。我仍然觉得“有趣”的是,我们使用的习俗与性病不相容。