확장 할당
Augmented assignment 증강 할당(또는 복합 할당)은 특정 프로그래밍 언어(특히 C에서 파생된 언어)에서 특정 할당 운영자에게 주어진 이름입니다.증강 할당은 일반적으로 연산자가 변수를 인수 중 하나로 받아들이고 결과를 동일한 변수에 다시 할당하는 문을 대체하기 위해 사용됩니다.간단한 예로는x += 1로 확장됩니다.x = x + (1). 다양한 바이너리 연산자에 대해 유사한 구성을 사용할 수 있습니다.
일반적으로 이 기능을 제공하는 언어에서는 변수를 인수 중 하나로 사용하여 동일한 유형의 결과를 반환할 수 있는 대부분의 연산자는 산술 연산자, 비트 시프트 연산자 및 비트 단위 연산자를 포함하여 결과를 해당 변수에 다시 할당하는 확장 할당 등가물을 가지고 있습니다.
논의
예를 들어, 다음과 같은 문이나 문장의 일부 변형은 많은 프로그램에서 볼 수 있습니다.
x = x + 1
즉, "변수에 저장된 번호를 찾습니다.x에 1을 더하고 변수 x에 추가 결과를 저장합니다." 이렇게 단순해 보이는 것처럼 식 중 두 부분이 동일한 것을 컴파일러가 인식하지 못할 경우 변수 x의 위치가 두 번 검색되어야 합니다.x는 배열 요소 또는 기타 복잡성에 대한 참조일 수 있습니다.이에 비해, 다음은 증강된 할당 버전입니다.
x + = 1
이 버전에서는 컴파일러가 변수 x의 위치를 한 번만 찾아보고 수정하는 코드를 생성하지 못한 것은 변명의 여지가 없습니다.물론 머신코드가 이러한 시퀀스를 지원한다면 말입니다.예를 들어 x가 단순 변수일 경우 기계 코드 시퀀스는 다음과 같습니다.
로드 x 1 스토어 추가 x
두 양식 모두 동일한 코드가 생성됩니다.하지만 특별한 운영 코드가 있다면
MDM x, 1
x에 1을 더하면 "메모리 수정"을 의미하며, 제대로 된 컴파일러는 두 형식 모두에서 동일한 코드를 생성합니다.INC 및 DEC 연산을 제공하는 기계 코드도 있고 (1을 더하거나 빼기 위해) 다른 상수를 허용하는 기계 코드도 있습니다.
보다 일반적으로 형식은
x ?= 식
여기서 ?는 일부 연산자(항상 +는 아님)를 의미하며, 특별한 조작 코드가 없을 수 있습니다.x가 복잡한 엔티티일 경우 컴파일러는 x에 접근할 때 중복을 피하도록 권장되며, 물론 x가 긴 이름일 경우 타이핑이 덜 필요할 수 있습니다.마지막으로 Burroughs B6700 시스템을 통해 제공되는 ALGOL 컴파일러의 유사한 기능의 기초가 되었습니다.실드 기호를 사용하여 할당된 변수를 나타냅니다.
긴 이름:=x + sqrt(LongName)*7;
될 것이다
긴 이름:=x + sqrt(~)*7;
기타 등등.이것은 단순한 것보다 더 일반적이다.x:=~ + 1;최적의 코드를 생성하는 것은 컴파일러의 영역입니다.
의미론
C와 같은 표현 지향 프로그래밍 언어에서 할당 및 증강 할당은 값을 갖는 표현식입니다.이를 통해 복잡한 표현에서 사용할 수 있습니다.그러나 이는 읽기 또는 이해하기 어려운 기호 시퀀스를 생성할 수 있으며, 더 나쁜 것은 잘못된 유형이 다른 횡설수설 시퀀스를 생성하기 쉽기 때문에 컴파일러에 의해 받아들여지지만 원하는 결과를 얻을 수 없다는 것입니다.Python과 같은 다른 언어에서 assignment와 argumented assignment는 표현식이 아닌 문장이기 때문에 복잡한 표현식에 사용할 수 없습니다.예를 들어, 다음은 유효한 C이지만 Python은 유효하지 않습니다.
a += b += c 할당과 마찬가지로 이러한 언어에서 증강 할당은 권리 관련 할당의 한 형태입니다.
C와 달리 C++의 복합 할당식은 l [1]값으로 평가됩니다.lvalue가 되면 다른 할당문 왼쪽에 [2]값을 쓸 수 있습니다.
인트 x = 11; (x *= 2) += 3; // x 를 25 로 설정합니다. 계산된 할당 위치
C, C++ 및 Python과 같은 언어에서는 할당 위치에 함수 호출이 포함된 증강 할당은 함수를 한 번만 호출하도록 의무화됩니다.예: 성명서:
my_array[f1()] += 1 함수f1한 번만 호출하도록 명령되어 있습니다.
언어가 매크로 확장을 통해 다음과 같은 추가 할당을 구현하는 경우:
my_array[f1()] = my_array[f1()] + 1 그리고나서f1두 번 호출됩니다.
언어별
C의 자손
C, C++ 및 C#에서 할당 연산자는 =이며 다음과 같이 증가합니다.
| 교환입니다. | 묘사 |
|---|---|
+= | 추가 |
-= | 뺄셈 |
*= | 곱셈 |
/= | 나누기 |
%= | 계수 |
<<= | 왼쪽 비트 시프트 |
>>= | 오른쪽 비트 시프트 |
&= | 비트 AND |
^= | 비트 배타적 논리합 |
= | 비트 포함 OR |
이들 각각을 해당 [1][3][4][5]언어에서 복합 할당 연산자라고 합니다.
지원 언어
다음 목록은 완전하지 않거나 모두 포함되지는 않지만 증강된 할당 연산자를 지원하는 주요 프로그래밍 언어 중 일부를 나열합니다.
|
|
「 」를 참조해 주세요.
- 증가 및 감소 연산자—특수 증가 할당의 경우 1
- IEEE 754 증강 연산
레퍼런스
- ^ a b "Assignment Operators". cppreference.com. C++ Reference. Retrieved 1 March 2021.
- ^ Stroustrup, Bjarne (2013). The C++ Programming Language (Fourth ed.). Addison-Wesley. ISBN 978-0-321-56384-2.
- ^ "ISO/IEC 9899:201x Committee Draft April 12, 2011 N1570".
- ^ "Assignment and compound assignment operators".
- ^ "C# Language Specification". Microsoft. Retrieved 17 March 2014.
