Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 문자열 리터럴 두 개를 연결하면 어떻게 될까?

이번 글에서는 C++의 문자열과 문자열 리터럴이 가진 또 다른 특성에 대해 알아보겠습니다. C++에서 두 문자열을 연결(concatenation)할 때는 몇 가지 중요한 규칙을 기억해야 합니다.

문자열 연결의 기본 규칙

  • x + y가 문자열 연결 표현식이라고 할 때, x와 y가 모두 string 타입이라면 그 결과는 문자열 x의 문자들 뒤에 문자열 y의 문자들이 이어진 새로운 복사본이 됩니다.
  • 피연산자 중 하나만 문자열 리터럴 또는 문자일 수 있으며, 둘 다 문자열 리터럴이어서는 안 됩니다. 만약 둘 다 리터럴이라면 연결이 이루어지지 않습니다.

컴파일되지 않는 예제

다음 코드를 살펴보겠습니다. 두 피연산자가 모두 문자열 리터럴인 경우입니다.

#include<iostream>
using namespace std;
main(){
    cout << "Hello " + "World";
}

출력 결과

위 코드는 두 피연산자가 모두 리터럴이기 때문에 컴파일되지 않습니다.

여기서 오류가 발생하는 이유는 '+' 연산자의 왼쪽 결합 법칙(left associativity) 때문입니다. 두 리터럴 사이에는 operator+가 정의되어 있지 않기 때문에 컴파일러가 연결 연산을 수행할 수 없습니다. 하지만 피연산자 중 하나라도 string 객체라면 정상적으로 동작합니다.

정상 동작하는 예제

이제 한쪽을 string 변수로 바꿔보겠습니다.

#include<iostream>
using namespace std;
main(){
    string my_str = "Hello ";
    cout << my_str + "World";
}

출력 결과

Hello World

이처럼 C++에서 문자열을 연결하려면 최소한 한쪽 피연산자가 std::string 타입이어야 합니다. 이는 문자열 리터럴(const char 배열)끼리는 + 연산자로 직접 연결할 수 없기 때문입니다. 실무에서도 리터럴끼리 연결해야 하는 상황이라면 컴파일 타임에 하나의 리터럴로 합치거나, string 객체를 활용하는 것이 올바른 방법입니다.