Публичная функция-член обмена друзьямиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Публичная функция-член обмена друзьями

Сообщение Anonymous »

В красивом ответе на идиому копирования и замены есть фрагмент кода, мне нужна небольшая помощь:

Код: Выделить всё

class dumb_array
{
public:
// ...
friend void swap(dumb_array& first, dumb_array& second) // nothrow
{
using std::swap;
swap(first.mSize, second.mSize);
swap(first.mArray, second.mArray);
}
// ...
};
и он добавляет примечание


Есть и другие утверждения о том, что мы должны специализировать std::swap для нашего типа, обеспечить внутриклассовую подкачку наряду со свободной подкачкой и т. д. Но во всем этом нет необходимости: любое правильное использование подкачки будет осуществляться посредством неквалифицированного вызова, а наша функция будет найдена через ADL. Одной функции хватит.


С другом Должен признаться, я немного в «недружелюбных» отношениях. Итак, мои основные вопросы:
  • выглядит как бесплатная функция, но она находится внутри тела класса?
  • почему этот обмен не статический? Очевидно, он не использует никаких переменных-членов.
  • "При правильном использовании swap можно обнаружить обмен через ADL"? ADL будет искать пространства имен, верно? Но заглядывает ли он и внутрь классов? Или здесь пригодится друг?
Побочные вопросы:
  • При использовании C++11 следует ли мне помечать свои обмены тегом

    Код: Выделить всё

    noexcept
    [/b]?
  • С C++11 и его range-for, следует ли мне размещать Friend Iter Begin() и Friend Iter End() одинаково внутри класса? Думаю, друг здесь не нужен, да?


Подробнее здесь: https://stackoverflow.com/questions/569 ... r-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»