• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Перегрузка оператора , (comma)

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

Лазил по MSDN 2005 и наткнулся на таблицу перегрузки операторов.
В эту таблицу включён оператор ',' (comma), причём, если верить таблице, его можно перегружать.

Вопросы такие:
1. Действительно ли его можно перегружать
2. Если можно, то для чего перегрузку можно использовать

PS. В C++ я не чайник, знаю его хорошо. Что такое перегрузка знаю и использовал. Меня интересует как практически можно использовать перегрузку этого оператора.
 
S

_setkh

первое что в голову пришло
для создания ф-ии с произвольным числом параметров одного типа
(удобство записи)
Код:
#include <vector>

using std::vector;

template<class _Tp> class Vector
 : private vector<_Tp>
{
private:
 typedef vector<_Tp> _Base;
 typedef Vector<_Tp> _Self;
...
public:
 _Self& operator,(const _Tp& __obj)
 {
   _Base::push_back(__obj);
   return *this;
 }
};
...
void F(const Vector<int>& __obj)
{
...
}

int main()
{
 Vector<int> a;
 F((a,1,2,3,4,5,6,7,8,9,10));
}
 
Z

ZZmiy

Хочется отметить, что перегружать этот оператор (а также операторы && и ||) не рекомендуется (в частности, см. "CPP Coding Standards - 101 Rules, Guidelines, and Best Practices" By Herb Sutter, Andrei Alexandrescu).
Example: Initialization library with overloaded operator, for sequence initialization. One library helpfully tried to make it easier to add multiple values to a container in one shot by overloading the comma. For example, to append to a vector<string> letters:

Код:
set_cont(letters) += "a", "b";    // problematic

That's fine until the day the caller writes:

Код:
set_cont(letters) += getstr(), getstr(); // order unspecified when using overloaded ","

If getstr gets user console input, for example, and the user enters the strings "c" and "d" in that order, the strings can actually be applied in either order. That's a surprise, because this is not a problem for the built-in sequencing operator,:

Код:
string s = getstr(), getstr();      // order well-specified using built-in ","
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!