Информация об изменениях

Сообщение Re[2]: using namespace std; от 18.10.2019 5:13

Изменено 18.10.2019 5:59 rg45

Re[2]: using namespace std;
Здравствуйте, Коваленко Дмитрий, Вы писали:


КД>У меня есть вопрос по этой теме.

КД>Как без "using namespace std" находятся свободные операторы сравнения (==, !=, ...) для классов определенных в пространстве std?
КД>Например, для std::string.

Есть такой механизм, Argument Dependent Lookup (ADL). Когда компилятор видит в коде вызов функции, он ищет кандидатов на подставновку, в том числе, и в пространствах имен фактических параметров. Это также относится и к операторам, поскольку они и есть функции по сути. В стандарте языка это описано в пункте 6.4.2 Argument-dependent name lookup.

Хорошо и подробно описано здесь:
https://en.cppreference.com/w/cpp/language/adl

Также полезно почитать:
http://programming-lang.com/ru/comp_programming/satter/0/j118.html

Открытый интерфейс класса образуют не только открытые функции-члены, но и функции, не являющиеся членами. Принцип Интерфейса гласит: для класса X все функции (включая функции, не являющиеся членами), которые "упоминают X" и "поставляются вместе с X" в одном и том же пространстве имен, являются логической частью X, поскольку образуют часть интерфейса X


Согласно этому принципу, одна и та же функция (оператор) может одновременно являться частью открытого интерфейса сразу двух и более классов. Как пример: оператор вывода std::string в std::ostream.
Re[2]: using namespace std;
Здравствуйте, Коваленко Дмитрий, Вы писали:


КД>У меня есть вопрос по этой теме.

КД>Как без "using namespace std" находятся свободные операторы сравнения (==, !=, ...) для классов определенных в пространстве std?
КД>Например, для std::string.

Есть такой механизм, Argument Dependent Lookup (ADL). Когда компилятор видит в коде вызов функции, он ищет кандидатов на подставновку, в том числе, и в пространствах имен фактических параметров. Это также относится и к операторам, поскольку они и есть функции по сути. В стандарте языка это описано в пункте 6.4.2 Argument-dependent name lookup.

Хорошо и подробно описано здесь:
https://en.cppreference.com/w/cpp/language/adl

Также полезно почитать:
http://programming-lang.com/ru/comp_programming/satter/0/j118.html

Открытый интерфейс класса образуют не только открытые функции-члены, но и функции, не являющиеся членами. Принцип Интерфейса гласит: для класса X все функции (включая функции, не являющиеся членами), которые "упоминают X" и "поставляются вместе с X" в одном и том же пространстве имен, являются логической частью X, поскольку образуют часть интерфейса X