Poniższy kod jest kompilowany z powodu niejawnej konwersji dla char
. Nie jestem pewien dlaczego, ponieważ jedyna niejawna konwersja, jakiej oczekiwałbym (i spodziewam się nie udać) jest od char const*
do size_t
.C++ nieoczekiwana implikowana konwersja
#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
}
Co to jest tutaj niejawna konwersja, która pozwala na kompilację? Jeśli usuniemy operator char
lub zrobię to explicit
, wówczas kompilacja zakończy się niepowodzeniem w żądanym miejscu.
Klasa, z której ten kod jest pobierany naprawdę, wymaga zarówno niejawnej konwersji, jak i operator[]
. Czy istnieje sposób, w jaki mogę zapobiec zachowaniu bez wyraźnej konwersji?
Czy próbowałeś dodanie prywatny 'operator [] (char const *)'? –