최근 답변에 대한 여러 의견 (What other useful casts can be used in C++)은 C++ 변환에 대한 나의 이해가 잘못되었음을 암시합니다.C++ 암시 적 변환
#include <string>
struct A {
A(const std::string & s) {}
};
void func(const A & a) {
}
int main() {
func("one"); // error
func(A("two")); // ok
func(std::string("three")); // ok
}
내 주장은 변환에서있다가 A에 const를 숯불 *로부터의 변환이없는 becauuse하여 첫 번째 함수 호출이 오류가이라고했다 : 그냥 문제를 명확히하기 위해, 다음 코드를 고려 문자열을 A로 변환하지만이 변환을 사용하면 둘 이상의 변환이 포함됩니다. 나의 이해는 이것이 허용되지 않는다는 것이며, 이것은 g ++ 4.4.0 & 코모 컴파일러에 의해 확인 된 것으로 보인다. 꼬모으로, 나는 다음과 같은 오류 얻을 : 내가 잘못 위치를 바람직하게는 C++ 표준을 참조하여, 여기도 또는 원래 대답, 지적 할 수있는 경우
"ComeauTest.c", line 11: error: no suitable constructor exists
to convert from "const char [4]" to "A"
func("one"); // error
을 이렇게하십시오.
그리고 C++ 표준의 대답은 것 같다 : Abhay에
At most one user-defined conversion (constructor or conversion function) is implicitly applied to a single value.
감사 견적을 제공.
답변에 대한 답변에 모두 잘못되었습니다. 죄송합니다. 나는 "과부하 해상도는 호출 할 사용자 정의 변환을 선택하는 데 사용됩니다."라고 말했고 나는 자신에게 다음과 같이 A (string const &)를 해결하고 "one"을 전달하지만 완전히 실패했습니다. 13.3.3.1.2는 "사용자 정의 변환 시퀀스는 초기 표준 변환 시퀀스 다음에 사용자 정의 변환 (12.3)이 이어지는 두 번째 표준 변환 시퀀스 으로 구성됩니다." 그러나 "one"-> string은 표준 변환 시퀀스가 아니지만 다른 사용자 정의 변환 시퀀스가 필요합니다! –
그냥 내 대리석을 잃지 않을만큼 오래 :-) –
큰 질문입니다! 이 토론은'std :: string'은 언어의 일부가 아니며 그 언어와의 변환은 "사용자 정의"라는 것을 의미합니다. 적어도 그건 내 이해이고, 내가 틀렸다면 나를 바로 잡아라. 질문이 이것에 대해 더 명백한 것이라면 좋을 것입니다. 'std :: string'의 정확한 상태는 오래된 C++ 손에 대해 명료 할 수 있지만, 금세기에 언어에 온 사람에게는 실현하기가 쉽지 않습니다. –