这个嵌套的命名空间定义有什么作用?

时间:2018-04-26 07:22:20

标签: c++

我甚至不知道如何搜索它,但我试图测试它,仍然无法理解它。下面的代码是什么意思:

boost::asio::io_service::id service::id;

来自:MaidSafe-CRUX at GitHub

1 个答案:

答案 0 :(得分:5)

::是范围解析运算符。左侧的名称表示范围;它可以是命名空间名称或类名。右侧的名称表示该范围的成员。

在您的情况下,似乎有一个类maidsafe::crux::detail::service,其中包含id类型的静态成员boost::asio::io_service::id。在许多情况下,静态成员需要一个类外定义,这是由您发布的代码提供的。

它可以被解析为任何其他C ++声明:它声明了service::id类型为boost::asio::io_service::id的东西。我们来看看各个组件。

类型:

  • boost是命名空间(在全局范围内)
  • asioboost
  • 中的命名空间
  • io_serviceboost::asio
  • 中的命名空间或类
  • idboost::asio::io_service
  • 中的一种类型

名称:

  • service是一个类名(可能在名称空间maidsafe::crux::detail内)
  • idmaidsafe::crux::detail::service内的静态成员。

附录

虽然它没有出现在这个问题中,但是在更现代的C ++代码中有时会遇到相关的语法:

namespace maidsafe::rux::detail
{

boost::asio::io_service::id service::id;

}

这已在C ++ 17中引入,作为在一行上打开多个名称空间的简写。它完全等同于问题中的代码。