[완료]C++ std::string, string literal 간단한 질문 입니다 :-)

shout_maya의 이미지

C++를 막 공부하기 시작 했습니다.

std::string hello = "hello";
std::string hello_world = hello + "world" + "!";

이 문장은 잘 컴파일이 되죠... string객체에 대한 + 연사자는 left-associative 기 때문에
std::string 타입 + string literal 타입 이기때문에..

그런데

std::string hello = "hello, " + "world!";
요건 안되는데 그 이유가 string literal + string literal 이라서 인데요
std::string 타입 + string literal 타입은 유효 한데

왜 string literal + string literal 은 유효하지 않을까요?
제가 책을 제대로 안 본 것인지, 내부적으로 그렇게 하기로 한 이유가 있는지 잘 모르겠어요 :-)

kewlbear의 이미지

string literal의 type은 const char*입니다.
string literal + string literal이 되려면 operator+(const char*, const char*)가 있어야하는데 그게 없기 때문에 안되는 것입니다.

익명 사용자의 이미지

포인터와 포인터의 + 연산은 정의되지 않습니다.

hongminhee의 이미지

C++의 문자열 리터럴은 const std::string이 아니라 const char*로 평가됩니다. 윗분 말씀대로 포인터와 포인터의 + 연산은 정의되지 않으므로 "hello" + "world"는 컴파일이 되지 않습니다.