gpt4 book ai didi

c++ - 这个命名空间的目的是什么?

转载 作者:行者123 更新时间:2023-11-30 02:42:50 27 4
gpt4 key购买 nike

在 Boost 1.55 中,current_function.hpp 的内容如下:

namespace boost
{
namespace detail
{
inline void current_function_helper()
{

#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) || defined(__ghs__)

# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__

#elif ...

#endif

}
} // namespace detail
} // namespace boost

为什么作者还要费心写那些命名空间?

最佳答案

详细信息 命名空间有助于避免用户不需要知道的内部函数或类污染官方命名空间。

现代 IDE 会解析头文件并提供代码补全,也就是说,如果您开始编写类似 boost::c 的代码,则会提供名称建议。如果内部算法(例如copy_pod_nontrivial 也会被列出。

此外,拼写错误可能导致调用内部函数或声明内部类类型的对象。那绝对不是我们想要的。

一个更技术性的原因是ADL:一些函数是通过它们的参数类型找到的(也涉及到函数模板的模板参数);这可能会导致名称查找在官方命名空间中搜索名称。如果在其中声明了辅助函数(或类),这可能会导致重载解析出现问题。

用户永远不应该(不需要)使用这些内部函数,因此如果您看到用户代码访问类似detail 的命名空间,您应该保持警惕。

关于c++ - 这个命名空间的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26721336/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com