类成员转换函数-id

时间:2014-06-08 15:23:17

标签: c++ language-lawyer postfix-operator

我正在寻找Stadard的引用描述了以下行为:

以下规则适用于conversion-type-id查询(3.4.6 / 7):

  

如果id-expression是转换函数id,则为   首先在对象的类中查找conversion-type-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的查找规则是什么?

1 个答案:

答案 0 :(得分:1)

如果明确使用 conversion-function-id ,如示例表达式c->operator Z()中所示,查找规则与任何其他类成员相同。一个技巧是第3节第8段的定义:

  

如果

,两个名称​​相同      
      
  • 它们是由相同字符序列组成的标识符,或

  •   
  • 他们是由同一个运营商组成的 operator-function-ids ,或者

  •   
  • 它们是 conversion-function-ids 形成的相同类型,或

  •   
  • 它们是引用相同类或函数的 template-ids ,或

  •   
  • 它们是使用相同文字后缀标识符形成的文字运算符的名称。

  •   

这里的第三个选项是表达式中使用的名称operator Z找到类成员C::operator Y()的原因。它是被访问类中的成员,其名称与表达式 conversion-function-id 的名称相同。