문자열 리터럴 연결
Accelerated C에서 Koenig는 " " 연산자를 사용하여 문자열을 연결하는 기능을 도입했습니다. 이는 문자열과 문자열 리터럴의 조합에서 작동하지만 여러 문자열 리터럴을 연결하려고 시도할 때 의문이 제기됩니다.
문제 이해
다음 예를 고려하세요.
const string hello = "Hello"; const string message = hello + ",world" + "!";
이 코드는 ",world" 및 "!"가 있음에도 불구하고 성공적으로 실행됩니다. 문자열 리터럴로. 그러나 다음과 같은 유사한 시도는 실패합니다.
const string exclam = "!"; const string message = "Hello" + ",world" + exclam;
연관성 요소
차이점은 " " 연산자의 연관성에 있습니다. 왼쪽에서 오른쪽으로 평가됩니다. 즉,
(hello + ",world") + "!"
첫 번째 경우 "hello"가 ",world"와 연결되어 문자열 개체가 됩니다. 그런 다음 이 개체는 "!"으로 연결됩니다.
두 번째 경우에는 두 문자열 리터럴 연결에 대한 제한으로 인해 "Hello"와 ",world"를 직접 연결할 수 없습니다. 이로 인해 컴파일러 오류가 발생합니다.
가능한 해결 방법
문제를 해결하려면 " "의 처음 두 피연산자가 문자열 개체인지 확인하거나 괄호를 사용한 평가 순서:
옵션 1: 첫 번째 피연산자로 문자열 객체
const string message = string("Hello") + ",world" + exclam;
옵션 2: 괄호
const string message = "Hello" + (",world" + exclam);
문자열 리터럴을 직접 연결할 수 없는 이유
문자열 리터럴은 문자 배열이며 표현식에 사용될 때 초기 요소에 대한 포인터로 변환됩니다. 두 개의 문자열 리터럴을 추가하려는 시도는 두 개의 포인터를 추가하는 것과 동일하며 유효하지 않습니다.
문자열 리터럴 연결의 대안
문자열 리터럴은 간단히 배치하여 연결할 수 있습니다. 서로 인접:
"Hello" ",world"
이것은 다음과 동일합니다:
"Hello,world"
그러나 이 접근 방식은 문자열 리터럴에서만 작동하고 문자열 객체나 문자 배열에서는 작동하지 않습니다.
위 내용은 C에서 문자열 리터럴을 \' \'로 연결할 때 직접 연결할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!