Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 템플릿과 정적 변수, 인스턴스별 동작 원리 완벽 이해

이번 튜토리얼에서는 C++에서 템플릿(template)정적 변수(static variable)가 어떻게 상호작용하는지 예제 프로그램을 통해 알아보겠습니다.

C++에서 함수 템플릿이나 클래스 템플릿을 사용할 때 중요한 특징 중 하나는, 각각의 템플릿 인스턴스(instantiation)가 정적 변수에 대한 독립적인 복사본을 가진다는 점입니다. 즉, 동일한 템플릿이라도 타입 인자가 다르면 서로 다른 정적 변수가 생성됩니다.

예제 코드

#include <iostream>
using namespace std;

template <typename T>
void fun(const T& x) {
    static int i = 10;
    cout << ++i;
    return;
}

int main() {
    fun<int>(1);      // 11 출력
    cout << endl;
    fun<int>(2);      // 12 출력
    cout << endl;
    fun<double>(1.1); // 다시 11 출력
    cout << endl;
    getchar();
    return 0;
}

실행 결과

11
12
11

코드 설명

fun<int>를 처음 호출하면 해당 인스턴스 전용의 정적 변수 i가 10으로 초기화되고, 전위 증가 연산자(++i)에 의해 11이 출력됩니다. 두 번째 fun<int> 호출에서는 같은 인스턴스의 정적 변수가 그대로 유지되므로 값이 12로 증가합니다.

반면 fun<double>fun<int>와는 완전히 별개의 함수 인스턴스이기 때문에, 자신만의 새로운 정적 변수 i를 가지며 다시 10으로 초기화된 후 11이 출력됩니다.

이처럼 템플릿의 정적 변수는 템플릿 인스턴스마다 독립적으로 존재한다는 점을 기억하면, 템플릿 기반 코드에서 정적 변수의 동작을 정확하게 예측할 수 있습니다.