Идентификатор функции преобразования члена класса

Я ищу цитату из Stadard описал следующее поведение:

Следующее правило для conversion-type-id поиск (3.4.6 / 7):

Если id-выражение является id-функции преобразования, его
ID-типа преобразования сначала ищется в классе объекта
выражение и имя, если найдено, используется. В противном случае это ищется
в контексте всего постфиксного выражения.

Рассмотрим следующий пример:

#include <iostream>

class J{ public: static const char a = 'j'; };

typedef J Y;

class C
{
public:
operator Y(){ std::cout << Y::a; }
};

int main()
{
typedef Y Z;
C *c= new C();
c -> operator Z(); //C::operator Y is invoked
}

Я не понимаю этого. Цитата выше не описывает это поведение. Он описывает поиск для conversion-type-id только, но это не описывает conversion-function-id сам.

Для чего нужно правило поиска conversion-function-id?

0

Решение

Если преобразование-функция-идентификатор явно используется, как в выражении примера c->operator Z()правила поиска такие же, как и для любого другого члена класса. Одна хитрость есть определение из параграфа 8 параграфа 3:

Два имени тот же самый если

  • они есть идентификаторы состоит из той же последовательности символов, или

  • они есть Оператор-функция-идентификаторы формируется с тем же оператором, или

  • они есть преобразование-функциональные идентификаторы формируется с тем же типом, или

  • они есть Шаблон Идентификаторы которые ссылаются на тот же класс или функцию, или

  • это имена литеральных операторов, сформированных с одним и тем же буквенным идентификатором суффикса.

Третий вариант здесь, почему имя operator Z используется в выражении находит члена класса C::operator Y(), Это член в доступном классе с тем же именем, что и выражение преобразование-функция-идентификатор.

1

Другие решения


По вопросам рекламы [email protected]