c ++ с использованием объявления ключевого слова, использованного в примерах библиотеки Boost - PullRequest
0 голосов
/ 08 февраля 2012

Я заметил, что

#include <iostream>
#include <boost/array.hpp>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

int main(int argc, char* argv[]){
    ....
}

использует , используя boost::asio::ip::tcp, а не , используя пространство имен , где tcp - это класс.может кто-нибудь сказать мне, какая польза от его написания таким образом?

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Вы не заполняете глобальное пространство имен всем содержимым namespace boost::asio::ip.

Вы используете только то, что вам нужно. Возьмите следующий пример:

namespace A
{
   void foo() {}
   void goo() {}
}

namespace B
{
   void foo() {}
   void goo() {}
} 

Если бы вы сделали

using namespace A;
using namespace B;

Вы получите двусмысленность при попытке вызвать методы.

Но вы можете сказать что-то вроде:

using A::foo;
using B::goo;

и двусмысленность исчезнет.

Конечно, самый безопасный способ сделать это - вообще не использовать using и полностью квалифицировать имена при каждом использовании.

1 голос
/ 08 февраля 2012

Это с использованием объявления (в отличие от с использованием директивы .

Набрав boost::asio::ip::tcp;, вы получите «ярлык» для класса tcp, но не для остальной части пространства имен boost::asio::ip.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...