有什么办法可以理解这里的_Ux、_Dx、_Dt的含义吗?这个助记符没有告诉我有关参数的任何信息。
2 回答
这个“奇怪的名字”(至少部分)与保留标识符有关。程序员(你,我)不允许在其源代码的任何地方定义_Ux
以下划线后跟大写字母的名称(也不允许类似__x
或a__b
包含相邻下划线的名称) 。C++ 实现(标准库细节、编译器内部......)因此可以使用这个保留的“名称空间”,而不必担心名称与用户代码冲突。
这是双赢的:实现永远不会定义像fooBar
or之类的名称FOO_BAR
(保留关键字 likeint
和公共名称 like std
, printf
or CHAR_BIT
),因此您可以在代码中安全地使用这些名称,相反,您永远不应该定义像_FooBar
, __foo_bar
or之类的名称FOO__BAR
,所以你不会弄乱实现(对于宏来说尤其如此)。
至于他们为什么使用_Ux * _Px, _Dx _Dt
而不是 eg _U * __p, _Deleter __d
(also_Ty
和 not _T
),好吧,我猜这只是他们内部的命名约定。
正如您所说的这些“助记符”只不过是 Visual Studio 的IntelliSense生成的提示,旨在帮助您编写代码(语法)而不是含义(语义)。
如果您需要更多信息来帮助您了解 API 及其正确用法,您应该查阅文档。在这种情况下,它可能是的构造函数的引用std::shared_ptr