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

C++ 제로 초기화(Zero Initialization) 완벽 정리 – 개념, 문법, 예제

제로 초기화(Zero Initialization)는 C++에서 객체의 초기값을 0으로 설정하는 것을 의미합니다. 이는 프로그램 실행 전에 객체를 결정론적인(deterministic) 상태로 만들어, 초기화되지 않은 변수로 인한 예측 불가능한 동작을 방지하는 중요한 초기화 방식입니다.

문법

T{} ;
char array [n] = "";

제로 초기화가 수행되는 경우

  • 정적(static) 또는 스레드 지역(thread-local) 저장 기간을 갖는 명명된(named) 변수가 0으로 초기화됩니다.

  • 생성자가 없는 비클래스(non-class) 타입 값의 초기화와, 생성자가 없는 클래스 멤버의 초기화에 사용됩니다.

  • 문자 배열에서 할당하려는 문자 수보다 배열의 길이가 더 클 때, 해당 문자 배열을 초기화하는 데 사용됩니다.

기억해야 할 핵심 사항

  • static 변수나 thread-local 변수처럼 일부 유형의 변수는 먼저 0으로 초기화된 후, 실제 호출 시점에 지정된 값으로 다시 초기화됩니다.

  • 0으로 초기화된 포인터를 널 포인터(null pointer)라고 부릅니다.

예제

다음은 C++에서 제로 초기화가 어떻게 동작하는지 보여주는 프로그램입니다.

#include <iostream>
#include <string>
using namespace std;
struct zeroInitialization {
    int x, y, z;
};
float f[3];
int* p;
string s;
int main(int argc, char* argv[]){
    zeroInitialization obj = zeroInitialization();
    cout<<"Zero initialized object variable :\t";
    cout<<obj.x<<"\t"<<obj.y<<"\t"<<obj.z<<"\n";
    cout<<"Zero initialized float value :\t";
    cout<<f[0]<<"\t"<<f[1]<<"\t"<<f[2]<<"\n";
    cout<<"Zero initialized pointer value :\t";
    cout<<p<<"\n";
    return 0;
}

실행 결과

Zero initialized object variable : 0 0 0
Zero initialized float value : 0 0 0
Zero initialized pointer value : 0

위 코드에서 구조체 객체 obj, 전역 float 배열 f, 전역 포인터 p는 모두 프로그램 시작 시 자동으로 0으로 초기화됩니다. 특히 포인터 p는 널 포인터로 초기화되므로 출력 결과가 0으로 표시됩니다. 이처럼 제로 초기화를 활용하면 별도의 명시적 초기화 없이도 안전하게 변수를 사용할 수 있습니다.