Следующий код компилируется из-за неявного преобразования для char
. Я не уверен, почему, поскольку единственное неявное преобразование, которое я ожидал бы (и ожидал бы сбой), было от char const*
до size_t
.
#include <cstddef>
struct foo
{
int operator[](size_t i) const { return 1; }
operator char() const { return 'a'; }
};
int main()
{
foo f;
f["hello"]; // compilation error desired here
}
Что такое неявное преобразование здесь, которое позволяет это скомпилировать? Если я удалю operator char
или сделаю его explicit
, тогда компиляция завершится с ошибкой в нужном месте.
Класс, который действительно извлекается из этого кода, действительно требует как неявного преобразования, так и operator[]
. Так можно ли предотвратить поведение, не делая явное преобразование?