0

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

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

如果 id-expression 是转换函数 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什么?

4

1 回答 1

1

如果显式使用了转换函数 ID,如示例中的表达式c->operator Z(),则查找规则与任何其他类成员的查找规则相同。一个技巧是第 3 节第 8 段中的定义:

如果两个名字相同

  • 它们是由相同字符序列组成的标识符,或者

  • 它们是使用相同运算符形成的运算符函数 ID,或

  • 它们是由相同类型构成的转换函数 ID ,或者

  • 它们是引用相同类或函数的模板 ID,或者

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

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

于 2014-06-08T15:33:44.167 回答