2013-03-02 3 views
1

Я просто просматриваю код на C++, и я что-то заметил. В исходном файле main.cppВызов метода без пространства имен

std::cout << converter(); 

Затем я искал определение преобразователя. Нет пространства имен и имени класса. Затем я увидел в tool.cpp

using namespace Ccon::converter; 

Определение находится в файле Ccon.cpp.

Почему main.cpp может позвонить в converter()?

Просьба сообщить.

Благодаря

+1

Поиск «Поиск по запросу, зависящий от аргумента». – jrok

+2

Прочтите хорошую книгу о C++ - мой совет –

+0

Поиск в Интернете для 'using namespace C++' - мой совет. – antonijn

ответ

-2

Пожалуйста, смотрите эту ссылку для аргумента-зависимого поиска имен: http://en.wikipedia.org/wiki/Argument-dependent_name_lookup

Когда компилятор не может найти безоговорочные converter() он будет искать доступные пространства имен и использует их, если имя и подпись Матчи.

В этом случае main.cpp включает в себя заголовочный файл Ccon.h, я полагаю, который определяет это пространство имен, поэтому он рассматривает это для converter() с аргументом void.

+1

Это применимо здесь? Нет аргументов для конвертера? –

+0

Как вы объясняете зависящий от аргументов поиск, он не имеет ничего общего с аргументами. Фактически, если бы это было так, пространства имен не имели бы никакого значения. – jogojapan

+0

Я упомянул подпись как в сигнатуре функции, имя функции, плюс тип входных аргументов и тип вывода. Никакие аргументы не были бы сигнатурой. Да, jogojapan, если вы читаете http://en.wikipedia.org/wiki/Argument-dependent_name_lookup#Criticism, это говорит о том, что пространства имен становятся менее строгими, поскольку ADL и это критика ADL – ruben2020

Смежные вопросы