하지 않는 이유는이 작품?
const std::string exclam = "!";
const std::string message = "Hello" + ", world" + exclam;
하지만이 나에게
const std::string exclam = "!";
const std::string message = exclam +
"Hello" + ", world" ;
을 설명해주십시오 잘 작동합니다.
감사
하지 않는 이유는이 작품?
const std::string exclam = "!";
const std::string message = "Hello" + ", world" + exclam;
하지만이 나에게
const std::string exclam = "!";
const std::string message = exclam +
"Hello" + ", world" ;
을 설명해주십시오 잘 작동합니다.
감사
표준 : 문자열 번째 예에서 사용되고 무엇인가 + 연산자를 가지고있다. const char *에는 첫 번째 예제에서 사용되는 해당 연산자가 없습니다.
식 "Hello" + ", world"
은 std::string
이 아니고 두 개의 const char[]
인수가 포함되어 있기 때문에. 그리고 서명이있는 연산자 +는 없습니다. 먼저 std::string
에 그 중 하나를 변환 할 수 있습니다
const std::string message = std::string("Hello") + ", world" + exclam;
이렇게하면 작동합니다. 'const std :: string message = "Hello"+ (", world"+ exclam);' – jrok
는 연관성까지입니다.
두 번째 경우는 std::string
이고 왼쪽에서 시작하여 operator+
과 연결됩니다. 첫 번째 경우는 const char *
으로 시작하며 연결은 operator+
입니다.
http : //www.learncpp.com/cpp-tutorial/31-precedence-and-associativity/ – John
그 이유는이 두 개의 문자열 리터럴을 추가에 대한 operator+
없으며, 필요하지 않을 것입니다. 방금 +
을 제거하면 첫 번째 예는 작동합니다.
const std::string message = "Hello" ", world" + exclam;
처리기
컴파일러 매직 *)은 함께 두 인접하는 리터럴을 추가 때문이다. std::string
리터럴 문자열을 추가하는 operator+
을 가지고 있기 때문에
두 번째 예는 작동합니다. 결과는 다음 리터럴을 연결할 수있는 다른 문자열입니다.
*) 번역 단계 6-인접 문자열 리터 연결된 토큰이다. 은 "마지막에 추가 된 경우 CONST 문자열이 작동하지 않습니다"
nitpick, 문자열 연결은 전처리기에 의해 실제로 수행되지 않습니다 (즉, 우리가 전처리기를 피하는 방법을 피할 필요가 없음을 의미합니다) – bames53
Ok, 그 컴파일러 * 마술을 만들어라. –
은 붉은 청어입니다. 문제가 해결되지 않는
const std::string message = "Hello" + ", world";
이유는 다른 답변에서 설명하고있다 :이 역시 작동하지 않습니다.
http://www.cplusplus.com/forum/beginner/13507/ – csj