• 티스토리 홈
  • 프로필사진
    유니얼
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
유니얼
  • 프로필사진
    유니얼
    • 분류 전체보기 (295)
      • Unity (17)
        • 게임 개발 (5)
      • Unreal (24)
        • 게임 개발 (20)
      • DirectX (36)
      • 코딩테스트 (91)
        • 프로그래머스 (25)
        • 백준 (66)
      • Google Workspace (1)
      • Programing (102)
        • C# (68)
        • C++ (24)
        • JavaScript (10)
      • 게임 서버 프로그래밍 (17)
      • Web (6)
        • 슈퍼코딩 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
    등록된 댓글이 없습니다.
  • 최근 공지
    등록된 공지가 없습니다.
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • [C++ 프로그래밍] constinit 키워드
    2024년 07월 10일
    • 유니얼
    • 작성자
    • 2024.07.10.:50
    728x90

    C++ 기초 프로그래밍: constinit 키워드

    C++20에서 도입된 constinit 키워드는 변수가 반드시 컴파일 타임에 초기화되어야 함을 보장하는 데 사용됩니다. 이는 초기화 순서와 관련된 문제를 방지하고, 코드의 안전성을 높이는 데 도움을 줍니다. 이번 블로그 글에서는 constinit 키워드를 사용하여 변수를 선언하고 사용하는 방법에 대해 알아보겠습니다.

    constinit 키워드

    constinit 키워드는 변수를 컴파일 타임에 초기화해야 함을 명시합니다. 이는 초기화가 반드시 상수 표현식으로 이루어져야 하며, 컴파일 타임에 그 값을 알 수 있어야 함을 의미합니다. constinit는 정적 초기화(static initialization)를 보장하여 프로그램의 초기화 순서와 관련된 문제를 방지합니다.

    constinit 사용 예제

    다음 예제 코드는 constinit 키워드를 사용하여 변수를 선언하고 초기화하는 방법을 보여줍니다:

    #include <iostream>
    
    const int val1 {33};
    constexpr int val2 {34};
    int val3 {35}; // 런타임 값
    
    constinit int age = 88; // 컴파일 타임에 초기화됨
    const constinit int age1 {val1}; // const와 constinit을 결합하여 사용 가능
    constinit int age2 {age1}; // const인 age1으로 초기화
    
    // constinit int age3 {val3}; // 오류: val3은 런타임에 평가됨, constinit으로 초기화 불가
    
    const constinit double weight {33.33};
    // constexpr constinit double scale_factor {3.11}; // constexpr와 constinit을 결합할 수 없음
    
    int main() {
        // constinit double height {1.72}; // main 함수 내에서는 사용 불가
    
        std::cout << "age : " << age << std::endl;
        std::cout << "age1 : " << age1 << std::endl;
        std::cout << "age2 : " << age2 << std::endl;
    
        age = 33; // constinit 변수는 변경 가능
        std::cout << "age : " << age << std::endl;
    
        // const와 constinit 결합
        std::cout << "weight : " << weight << std::endl;
        // weight = 44.44; // 컴파일 오류: const 변수는 변경 불가
    
        return 0;
    }
    

    출력 결과

    위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다:

    age : 88
    age1 : 33
    age2 : 33
    age : 33
    weight : 33.33
    

    예제 분석

    constinit 변수 선언:

    • constinit int age = 88;는 컴파일 타임에 초기화되는 정수형 변수를 선언합니다.
    • const constinit int age1 {val1};는 const와 constinit을 결합하여 상수 초기화 변수를 선언합니다.
    • constinit int age2 {age1};는 const인 age1으로 초기화됩니다.

    런타임 값과 constinit:

    • int val3 {35};는 런타임 값으로 초기화되는 변수입니다.
    • constinit int age3 {val3};는 컴파일 오류를 발생시킵니다. 이는 val3이 런타임에 평가되므로 constinit으로 초기화할 수 없기 때문입니다.

    변수 값 변경:

    • constinit 변수는 초기화된 후 변경할 수 있습니다. 예를 들어, age = 33;는 age 변수의 값을 변경합니다.
    • const와 constinit을 결합한 변수는 초기화 후 변경할 수 없습니다. 예를 들어, weight = 44.44;는 컴파일 오류를 발생시킵니다.

    컴파일 타임 상수:

    • constexpr와 constinit을 결합할 수 없습니다. 이는 두 키워드가 서로 상충되는 특성을 가지기 때문입니다.

    결론

    C++20에서 도입된 constinit 키워드는 변수가 반드시 컴파일 타임에 초기화되도록 보장합니다. 이를 통해 초기화 순서와 관련된 문제를 방지하고, 코드의 안전성을 높일 수 있습니다. constinit 키워드를 사용하여 정적 초기화를 보장하고, 변수의 초기화 상태를 명확하게 할 수 있습니다.

    반응형
    다음글
    다음 글이 없습니다.
    이전글
    이전 글이 없습니다.
    댓글
조회된 결과가 없습니다.
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바