Сообщение Re[2]: using namespace std; от 18.10.2019 5:13
Изменено 18.10.2019 5:29 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
КД>У меня есть вопрос по этой теме.
КД>Как без "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
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
Согласно этому принципу, одна и та же функция (оператор) может одновременно являться частью открытого интерфейса сразу двух и более классов. Как пример: оператор вывода std::string в std::ostream.
КД>У меня есть вопрос по этой теме.
КД>Как без "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.