문자열 리터럴 연결
C에서는 연산자를 사용하여 문자열을 연결할 수 있습니다. 그러나 문자열 리터럴을 연결할 때 따라야 할 특정 규칙이 있습니다.
문자열 정의의 유효성
다음 코드는 두 개의 문자열 변수를 정의합니다.
<code class="cpp">const string hello = "Hello"; const string message = hello + ",world" + "!";</code>
연결되는 두 문자열 중 하나가 std::string 개체(hello)이기 때문에 이 코드는 유효합니다. 연산자는 hello와 ",world"의 연결을 먼저 평가하여 std::string 객체를 생성합니다. 그런 다음 이 개체는 "!"으로 연결됩니다.
그러나 다음 코드는 유효하지 않습니다.
<code class="cpp">const string exclam = "!"; const string message = "Hello" + ",world" + exclam;</code>
가장 왼쪽에서 연결되는 두 문자열은 모두 문자열 리터럴(" 안녕하세요' 및 ',world'). 연산자는 두 문자열 리터럴을 직접 연결하는 데 사용할 수 없습니다.
연산자의 왼쪽에서 오른쪽 연관성
C의 연산자는 왼쪽에서 오른쪽 연관성을 갖습니다. 즉, 두 번째 예제 코드에 해당하는 괄호 안에 있는 표현식은 다음과 같습니다.
<code class="cpp">const string message = (("Hello" + ",world") + exclam);</code>
보시다시피 두 문자열 리터럴 "Hello"와 ",world"가 먼저 연결되어 컴파일 시간이 발생합니다. error.
제한 극복
이 제한을 극복하는 방법에는 여러 가지가 있습니다.
<code class="cpp">const string message = string("Hello") + ",world" + exclam;</code>
<code class="cpp">const string message = "Hello" + (",world" + exclam);</code>
제한 이유
두 문자열 리터럴을 직접 연결할 수 없다는 제한은 문자열 리터럴이 문자 배열(const char [N], 여기서 N은 문자열 길이에 1을 더한 값, 널 종결자). 대부분의 컨텍스트에서 배열을 사용하면 초기 요소에 대한 포인터로 변환됩니다.
따라서 를 사용하여 두 개의 문자열 리터럴을 연결하려고 하면 두 개의 const char* 포인터를 함께 추가하려는 효과가 있습니다. . 두 개의 포인터를 추가하는 것은 문자열 연결의 맥락에서 의미가 없기 때문에 불가능합니다.
위 내용은 C에서 두 문자열 리터럴을 직접 연결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!