std::string
을 수행하는 대부분 동등한 것은 형 const char *
의 우측 인자를 멤버 함수 operator +
있다. const char *
을 운영자의 왼쪽에 둘 수있는 전 세계적으로 정의 된 operator +
이 있습니다.
// std::string::operator + (const char *)
std::string a;
a = "b";
// global operator + (std::string, const char *)
std::string a;
a = (std::string)"b" + "c";
// global operator + (const char *, std::string)
std::string a;
a = "b" + (std::string)"c";
인수 타입 캐스트 문자열 리터럴 유형 const char *
의 때문에 std::string
에해야하는 이유. "a" + "b"
을 수행 할 때 발생하는 문제는 컴파일러가 할당 문에 std::string
유형의 객체가 없으므로 포인터를 함께 추가하려고 시도한다는 것입니다. 이를 방지하려면 char *
용어의 왼쪽 또는 오른쪽에 std::string
유형의 용어가 있어야합니다.
나는 std :: string s = (std :: string) ("a"+ "b"+ "c")를 의미한다고 생각한다. ? – BlackBear
@BlackBear는 컴파일하지도 않습니다. 서로 포인터를 추가 할 수 없기 때문입니다. – Timbo
@BlackBear : 그건 실패합니다.그의 코드는 "a"를 문자열 객체에 캐스트 한 다음 연결을 수행합니다. 당신은 실패 할 두 포인터를 추가하려고 시도합니다. –