> 백엔드 개발 > C++ > C에서 문자열 리터럴을 \' \'로 연결할 때 직접 연결할 수 없는 이유는 무엇입니까?

C에서 문자열 리터럴을 \' \'로 연결할 때 직접 연결할 수 없는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-24 08:45:02
원래의
369명이 탐색했습니다.

When Concatenating String Literals with

문자열 리터럴 연결

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿