Форум программистов, компьютерный форум CyberForum.ru

Friend функции, определенные в теле класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Отправка е-мейла http://www.cyberforum.ru/cpp/thread1370460.html
Хочу написать программу которая отправляет е-мейл(ввод е-мейла отправителя и ввод е-мейла получателя вводится в коде программы), прикрепив картинку. Причем часть пути картинки может быть не известна и известно только часть имени изображения(формат так же не известен). Если можно , с комментариями (чуть -чуть)
C++ Список функций из стандартных dll библиотек (lib.exe MVS) В общем нужен список функций (желательно и хедеров, в которых они находятся) исходя из имени стандартной библиотеки dll. Наткнулся в инете что это мне может дать lib.exe, который входит в состав Micosoft Visual Studio. Начал читать, и что то ни фига не понял как её хоть запустить... Lib.exe нашёл, сама она по себе не запускается.(пишет мол нету библиотеки mspdb80.dll) Кто может подсказать что... http://www.cyberforum.ru/cpp/thread1370268.html
Ошибка в шаблоне функции C++
Доброго времени суток. У меня проблема с функцией для чтения таблицы из файла, которая спокойно работает с типами int и float, но не хочет работать как шаблон функции. template <typename A> A**readMatrix(int a, int b, string fileName){ A**matrix = new A*; for(int i=0;i< a;i++) matrix=new A; ifstream read; read.open(fileName); for(int i=0;i< a;i++){ for(int...
Декомпиляторы С++ кода C++
Декомпиляторы С++ кода Доброго вечера!! Перечислите поджалуста, назовите. Ссылки, это, крайне приветствую! Очень хочу поиграть с такими игрушками. А если можно, выкладывайте сюда!
C++ NetBeansIDE8 не находит команду make http://www.cyberforum.ru/cpp/thread1368887.html
всем привет! возникла проблема установил NetBeansIDE8 создаю проект и при выполнении не находит команду маке... помогите кто может - кто может помогите... скриншот прилагаю )
C++ Книжка по MPEG-4 Посоветуйте книгу на русском по mpeg-4. На работе дали почитать http://www.img.lx.it.pt/~fp/cav/Additional_material/MPEG2_overview.pdf Но читается сложно - много специфической терминологии. Поэтому нет ли приблизительно такой но на русском? подробнее

Показать сообщение отдельно
hoggy
6369 / 2587 / 452
Регистрация: 15.11.2014
Сообщений: 5,722
Завершенные тесты: 1
09.02.2015, 15:18  [ТС]     Friend функции, определенные в теле класса
Цитата Сообщение от DiffEreD Посмотреть сообщение
Тут воде проблема в правилах ADL. foo будет видна только если фактические параметры у нее будут из области видимости структуры.
Это мне как бы итак понятно.
Мне не понятно, что за чертовщина, и почему оно так?

В каком скоупе по факту оказывается функция-друг, которая определена в теле класса?


11.3 Friends

6 A function can be defined in a friend declaration of a class if and only if the class is a non-local class (9.8),
the function name is unqualified, and the function has namespace scope. [ Example:
class M {
friend void f() { } // definition of global f, a friend of M,
// not the definition of a member function
};
— end example ]
По идее такая функция друг должна быть видна из того же скоупа,
в котором был объявлен сам класс.

Тогда не понятно, почему до неё иначе,
чем при помощи Argument-dependent name lookup не дотянуться???

Там ниже:

7 Such a function is implicitly inline. A friend function defined in a class is in the (lexical) scope of the
class in which it is defined. A friend function defined outside the class is not (3.4.1).
Эту фразу я как то вообще не осилил.

Ссылка 3.4.1 описывает правила собственно:

3.4.1 Unqualified name lookup [basic.lookup.unqual]
Там километр корявого текста, суть которого:
неквалифицированное имя ищется в первую очередь среди полных (complete) имен, в ближайшем скоупе.

То бишь локальным именам отдается предпочтение, если они пригодны к использованию.

В данном случае единственное пригодное имя - имя функции, которая была определена в теле класса.

Вопрос: почему она вообще не видна без Argument-dependent name lookup ?

Я может быть чего то не так понял, и она на самом деле реально существует в пространстве имени самого класса, а не в пространстве, где был объявлен класс????

Но если так, то почему она не может быть квалифицирована?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru