예 그리고 아니오.
사용중인 C ++ 버전에 따라 다릅니다.
- C ++ 98 및 C ++ 03은
explicit
형식 변환 연산자를 지원하지 않습니다.
- 하지만 C ++ 11은 그렇습니다.
예,
struct A
{
operator int() { return 100; }
explicit operator std::string() { return "explicit"; }
};
int main()
{
A a;
int i = a;
std::string s = a;
}
로 컴파일 g++ -std=c++0x
하면 다음 오류가 발생합니다.
prog.cpp : 13 : 20 : 오류 : 'A'에서 스칼라가 아닌 유형 'std :: string'으로의 변환이 요청되었습니다.
온라인 데모 : http://ideone.com/DJut1
하지만 작성하자마자 :
std::string s = static_cast<std::string>(a);
오류가 사라집니다 : http://ideone.com/LhuFd
BTW, C ++ 11에서 명시 적 변환 연산자는 boolean으로 변환되는 경우 "문맥 변환 연산자"라고 합니다 . 또한 암시 적 및 명시 적 변환에 대해 자세히 알고 싶다면 다음 항목을 읽어보십시오.
도움이되기를 바랍니다.
toString
대신 함수를 호출하십시오operator std::string
. 물론 이로 인해 일부 템플릿에 문제가 발생할 수 있습니다. 저는 항상을 사용해 왔으며toString
문제를 일으키지 않았지만 코딩 스타일에 따라 달라질 수 있다고 생각합니다.