Koenig는 자신의 저서 "Accelerated C"에서 ' ' 연산자를 사용하여 문자열을 연결하는 개념을 소개합니다. 리터럴과 객체. 이는 간단해 보일 수 있지만 예상치 못한 결과로 이어질 수 있는 미묘한 차이가 있습니다.
다음 두 가지 예를 고려해 보세요.
const string hello = "Hello";
const string message = hello ",world" "!";
const string exclam = "!";
const string message = "Hello" ",world" exclam;
첫 번째 예에서는 세 문자열을 성공적으로 연결합니다. 그러나 두 번째 예는 실패합니다.
불일치를 이해하려면 ' ' 연산자의 연관성을 고려해야 합니다. ' ' 연산자는 왼쪽에서 오른쪽으로 결합됩니다. 즉, 왼쪽에서 오른쪽으로 평가됩니다. 이를 고려하지 않으면 예상치 못한 동작이 발생할 수 있습니다.
두 번째 예에서 표현식은 다음과 같이 괄호로 묶을 수 있습니다.
const string message = ("Hello" ",world") exclam;
보시다시피 두 문자열 리터럴 "Hello"와 ",world"가 먼저 연결됩니다. 이로 인해 문자열 개체 "exclam"과 더 이상 연결할 수 없는 문자열 리터럴이 생성됩니다.
이 문제를 해결하는 방법에는 여러 가지가 있습니다.
const string message = string("Hello") ",world" exclam;
const string message = "Hello" (",world" exclam);
' ' 연산자는 문자열 리터럴이 아닌 문자열 개체를 연결하도록 설계되었습니다. 문자열 리터럴은 문자 배열이며 표현식에 사용될 때 초기 요소에 대한 포인터로 변환됩니다. 문자열 리터럴을 연결하는 경우처럼 두 개의 포인터를 추가하는 것은 C에서 허용되지 않습니다.
' ' 연산자를 사용하여 문자열 리터럴을 연결할 수는 없지만 다음을 수행할 수 있습니다. 나란히 배치하여 결합합니다:
"Hello" ",world"
이것은 다음과 동일합니다:
"Hello,world"
긴 문자열 리터럴을 여러 줄로 나누는 데 유용합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3