다음 코드는 char
에 대한 암시 적 변환으로 인해 컴파일됩니다. 왜 내가 암시 적으로 변환을 기대하기 때문에 (그리고 실패 할 것으로 예상하는지) char const*
에서 size_t
으로 넘어갈 이유가 확실하지 않습니다.C++ 예기치 않은 implict 변환
#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[]
이 모두 필요합니다. 그렇다면 전환을 명시 적으로 나타내지 않고 동작을 방지 할 수있는 방법이 있습니까?
당신이 추가하는 시도 유무 : 그래서 더 ARGE 값 (포인터의 값) [] 과부하 동안 조심하고있는 경우, 사실이 상위 경계에 대한 을 확인, 사실 인덱스 값은 알 것이다 private 연산자 [] (char const *)'? –