Рассмотрим класс с перегруженным унарным оператором & (Address-of). Пусть это будет класс A
template <class C>
class A
{
public:
C * operator &()
{
return &data;
}
//...
private:
C data;
}
Теперь я хочу передать какой-то функции указатель типа A
, чтобы заполнить ее данными
. Назовем его f
void f(A * auto_containter)
{
//...
}
. Но ясно, почему приведенный ниже код не работает (даже не компилируется). Причина в том, что вызывается перегруженный оператор.
A a;
f(&a);
Вопрос следующий:
Есть ли какой-либо синтаксис для передачи адреса a
в f
? Если нет, то для меня очень странно, почему разрешено перегружать унарный оператор &
, потому что это делает код более ошибочным и трудным для понимания. Или есть какие-то другие причины?