下标运算符和隐式转换为指针类型

时间:2019-01-25 04:34:58

标签: c++ implicit-conversion function-templates conversion-operator

我正在阅读C ++模板-《完整指南》(第二版)和B.2.1讲述了隐式“ this”参数的隐式转换。

同一示例: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1592.pdf

  

根据ptrdiff_t的typedef,编译器可能会推断出两者之间存在歧义   BadString :: operator []并将隐含的“ this”参数转换为char *并使用内置下标   运算符。

有人可以在下面的三个示例中解释obj [0]表达式与这种转换有何关系,为什么编译器以这种方式起作用?

谢谢。

int main() {
    abc x;
    auto first = x[1];
    auto second = x + 2;
    return 0;
}

有效(为什么?):

struct abc
{
    operator bool *() { return {}; }
};

不起作用(为什么):

struct abc
{
    template <typename T>
    operator T *() = delete;
};

template <>
abc::operator int *() { return {}; }

不起作用(重载运算符'[]'的使用含糊不清):

struct abc
{
    operator bool *() { return {}; }
    template <typename T>
    operator T *() = delete;
};

template <>
abc::operator int *() { return {}; }

0 个答案:

没有答案