0

我正在阅读 C++ Templates - The Complete Guide, 2nd Edition, and 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 {}; }
4

0 回答 0