C++의 구조 바인딩

C Ui Gujo Bainding



구조 바인딩을 사용하면 구조 또는 클래스에서 요소를 추출하고 각 멤버에 별도로 액세스하지 않고도 다른 변수에 할당할 수 있습니다. 구조 바인딩은 수동 요소 추출의 필요성을 없애고 구조체 또는 클래스의 여러 요소를 별개의 변수로 동시에 압축 해제할 수 있도록 하여 코드의 가독성과 간결성을 향상시키는 데 사용됩니다. 이 자습서에서는 C++에서 구조 바인딩의 작업, 구문 및 예제에 대해 설명합니다.

C++에서 구조화된 바인딩이란 무엇입니까?

구조 바인딩은 C++17에 추가된 C++ 기능으로, 구조체 또는 튜플을 개별 변수로 분해하여 코드의 간결함을 향상시킬 수도 있습니다. 구조체 멤버 액세스 구문을 더 간단하게 만들고 오타나 잘못된 인덱싱으로 인한 오류 가능성을 낮추는 데 사용할 수 있습니다.

통사론







C++의 구조체 바인딩 구문은 다음과 같습니다.



자동 [ var1 , var2 , ... ] = 표현 ;

C++의 구조체 바인딩 구문에서 'var1' 및 'var2'는 변수 이름이고 'expression'은 구조체 또는 클래스를 생성하는 식입니다. auto 키워드를 사용하여 자동으로 생성되는 변수를 선언합니다.



수식어

수정자는 구조화된 바인딩과 페어링하는 데 사용할 수 있습니다. 구문은 다음과 같습니다.





자동 & [ , , , ... ] = 표현 ;

자동 && [ , , , ... ] = 표현 ;

선언에 사용된 '&' 또는 '&&' 연산자는 바인딩이 lvalue 또는 rvalue 참조인지 여부를 정의합니다. '&'로 표시되는 lvalue 참조는 바인딩 변수의 값을 변경하는 데 사용할 수 있는 참조를 설정합니다. 참조를 사용하여 만든 값의 변경 사항은 원래 구조 또는 튜플에서 볼 수 있습니다.

반면 '&&'로 표현되는 rvalue 참조는 바인딩에 포함된 변수의 값을 읽는 데만 활용되는 참조를 제공합니다. 객체의 복제본을 만드는 것을 방지하기 때문에 삭제해야 하는 임시 객체 또는 rvalue에 바인딩하는 데 편리합니다. 이는 메모리와 시간이 많이 소요될 수 있습니다.



예제 1: C++의 구조체 바인딩

다음은 C++ 구조 바인딩의 예입니다.

#include <비트/stdc++.h>

네임스페이스 표준 사용 ;

구조체 입방체

{

정수 엑스 ;

정수 그리고 ;

정수 와 함께 ;

} ;

정수 기본 ( )

{

씨큐브 = { 10 , 이십 , 30 } ;

자동 [ x_좌표 , y_좌표 , z_좌표 ] = ;

쿠우트 << 'X축 : ' << x_좌표 << ;

쿠우트 << 'Y축 : ' << y_좌표 << ;

쿠우트 << 'Z축 : ' << z_좌표 << ;

반품 0 ;

}

위의 예에서 세 개의 정수 x, y 및 z로 구조체 큐브를 선언합니다. 구조는 공간에서 큐브를 보여줍니다. 큐브 유형의 변수 c가 생성되고 값(10,20,30)으로 초기화됩니다. 이 코드 구조에서 바인딩은 구문 auto[ x_coordinate, y_coordinate, z_coordinate ] = c를 사용하여 각각 개별 변수 x_coordinate, y_coordinate, z_coordinate에 struct의 멤버 x, y 및 z 값을 할당합니다. 위의 출력은 다음과 같습니다.

예제 2: C++에서 구조 바인딩을 해제하여 구조체 압축 해제

다음은 구조체를 압축 해제하는 구조체 바인딩의 예입니다.

#include

#include <문자열>

네임스페이스 표준 사용 ;

구조체 학생 {

문자열 이름 ;

정수 나이 ;

} ;

정수 기본 ( ) {

학생 { '함자' , 32 } ;

자동 [ 이름 , 나이 ] = 에스 ;

쿠우트 << 이름 << ' 이다 ' << 나이 << ' 살이에요.' << ;

반품 0 ;

}

위의 코드에서 Student 구조체에는 두 개의 멤버가 있습니다. 이름 그것은 문자열이고 나이 그것은 정수입니다. 그런 다음 Student 개체를 만들고 각 구성원에 초기 값을 할당합니다. 그런 다음 s의 멤버는 구조적 바인딩을 사용하여 변수의 이름과 연령으로 분리되고 이 값은 아래 스크린샷과 같이 인쇄됩니다.

예제 3: 수정자를 사용한 C++의 구조 바인딩

다음은 수정자를 사용하여 변수 값을 num1 및 num2로 업데이트하는 구조 바인딩의 예입니다.

#include

#include <튜플>

네임스페이스 표준 사용 ;

정수 기본 ( ) {

튜플 < 정수 , 정수 > { 25 , 이십 } ;

자동 & [ 숫자 1 , 숫자 2 ] = ;

쿠우트 << 'num1의 값 = ' << 숫자 1 << ', 숫자2 = ' << 숫자 2 << ' \N ' ;

숫자 1 = 30 ;

쿠우트 << '변경된 num1 값 = ' << 숫자 1 << ', 숫자2 = ' << 숫자 2 <<

' \N ' ;

자동 && [ 3번 , 숫자 4 ] = make_tuple ( 100 , 250 ) ;

쿠우트 << '이제 num3의 값 = ' << 3번 << ', 숫자4 = ' << 숫자 4 << ' \N ' ;

반품 0 ;

}

이전 코드에서는 튜플 t를 만들고 lvalue 참조를 사용하여 해당 구성 요소를 num1 및 num2에 연결합니다. 그런 다음 num1의 값을 30으로 변경하고 num1 및 num2 값을 출력합니다. 또한 make_tuple(100, 250)을 통해 임시 튜플을 만들고 rvalue 참조를 사용하여 해당 요소를 num3 및 num4에 연결합니다. 그런 다음 num3 및 num4의 값은 num3 및 num4가 rvalue 참조와 연결되어 있기 때문에 인쇄되며 make_tuple(100, 250)에 의해 형성된 임시 튜플을 변경하는 데 사용할 수 없습니다. 그들은 그것을 읽을 수만 있습니다. 프로그램을 실행하면 다음 결과가 화면에 표시됩니다.

결론

구조체 바인딩은 구조체 또는 클래스의 여러 값을 단일 식의 개별 변수로 압축 해제하여 보다 간결하고 읽기 쉽고 안전한 코드를 생성하는 C++의 기능입니다. 수정자를 사용한 구조 바인딩은 구조화된 개체 내에서 값을 변경하는 프로세스를 간소화합니다.