Aşağıdaki kod, char
için örtük dönüştürme nedeniyle derlenmiştir. Neden beklediğim tek örtülü dönüşümden (ve başarısızlığa uğramayı beklediğinden) neden char const*
- size_t
arasında olduğundan emin değilim.C++ beklenmedik implict dönüşümü
#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
}
Burada örtülü dönüştürme, bunun derlenmesine olanak veren nedir? operator char
'u kaldırırsam veya explicit
yapsam, derleme istenen konumda başarısız olur.
Bu kodun gerçekten çıkarıldığı sınıf, hem örtük dönüşüme hem de operator[]
'a gereksinim duyar. Yani, dönüşümü açık hale getirmeden davranışı engelleyebileceğim bir yol var mı?
eklemeyi denediniz: böylece daha iyi, arge değeri (bir göstericinin değeri) [] aşırı ederken dikkatli olun ve varsa Aslında, orada üst sınır için kontrol edin; Aslında endeks değeri al olurdu özel bir işleç [] (char const *) '? –