我正在阅读 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 {}; }