- Lambda : 람다(lambd)는 이름 없는 함수를 그 자리에서 바로 정의해서 사용하는 기능이다.

- [] : 캡처 절 - 외부 변수를 람다 안에서 어떻게 사용할지 지정
- () : 매개변수 - 일반 함수의 파라미터와 동일
- {} : 함수 본문 - 실행할 코드

- 참조형(reference)은 C++에서 지원하는 세번째 변수 타입이다. 참조형은 다른 객체 또는 값의 별칭으로 사용되는 C++ 타입이다.
1. non-const 값 참조형
2. const 값 참조형
3. r-value 참조형
C++는 위 세가지 종류의 참조형을 지원한다.
int value = 5;
int& ref = value;
위 코드에서 &는 주소(address)를 의미하지 않고 참조(reference)를 의미한다.

C++은 메모리를 직접 관리한다.
// C++ - 스택에 생성
QLabel label1; // 스택
label1.setText("Hello"); // . 사용
// C++ - 힙에 생성
QLabel *label2 = new QLabel(); // 힙
label2->setText("Hello"); // -> 사용
delete label2; // 직접 메모리 해제!
C++의 &는 문맥에 따라 4가지 다른 의미로 쓰인다.
1. 주소 연산자 (Address-of)
int x = 10;
int* ptr = &x; // x의 주소를 가져옴
cout << &x; // 주소 출력: 0x7fff1234
2. 참조 타입 선언
int x = 10;
int& ref = x; // ref는 x의 별명 (참조 변수)
void func(int& param); // 참조로 받는 함수
3. 비트 AND 연산자
int a = 5; // 0101
int b = 3; // 0011
int c = a & b; // 0001 = 1
4. 멤버 함수 포인터
&QSlider::valueChanged // QSlider 클래스의 멤버 함수 포인터
&Widget::changeText // Widget 클래스의 멤버 함수 포인터
- 상황별 & 사용
1. 변수 앞의 &
int x = 10;
// 선언 시 → 참조 타입
int& ref = x; // ref는 x의 별명
// 사용 시 → 주소 연산자
int* ptr = &x; // x의 주소
cout << &x; // 주소 출력
// 람다 캡처 → 참조로 캡처
auto lambda = [&x](){ // x를 참조로 캡처
x = 20;
};
2. 클래스::함수 앞의 &
// 멤버 함수 포인터
connect(ui->button, &QPushButton::clicked, // 함수 포인터
this, &Widget::changeText); // 함수 포인터
* Callback 즉, 나중에 실행할 함수를 등록하기 위해서 &(함수명)을 사용한다.
connect(ui->button, &QPushButton::clicked,
this, &Widget::changeText);
// 이게 하는 일:
// 1. changeText 함수의 주소를 저장해둠
// 2. 버튼 클릭 시 저장된 주소로 함수 호출
// 3. 즉, "나중에 호출할 함수"를 등록하는 것
C++에서 멤버 함수는 일반 함수와 다르게 취급되기 때문에 &로 호출해야 한다.
// 일반 함수
void func() {}
func; // 자동으로 포인터로 변환
&func; // 명시적 포인터
// 멤버 함수
class MyClass {
void method() {}
};
MyClass::method; // ❌ 이건 의미 없음 (객체 없이는 호출 불가)
&MyClass::method; // ✅ 포인터로 만들 때만 의미 있음
void playSound() { cout << "Beep!" << endl; }
void showMessage() { cout << "Message!" << endl; }
// 사용자 설정에 따라 다른 함수 실행
void (*notification)(); // 함수 포인터
if (userPreference == "sound") {
notification = &playSound; // 소리 함수 선택
} else {
notification = &showMessage; // 메시지 함수 선택
}
notification(); // 선택된 함수 실행728x90
'Embedded > QT' 카테고리의 다른 글
| Qt - Dialogs (0) | 2025.11.13 |
|---|---|
| Qt - 프로젝트 생성 관련 및 기본 참고 내용 (0) | 2025.11.09 |