숏컷 코드
int count = 42;
double ratio = 0.75;
bool ready = true;
std::int32_t id = 1001; // 크기 고정 타입
auto name = std::string{"RefDock"}; // 우변에서 타입 추론
const auto pi = 3.14159; // const 추론
constexpr int MAX_N = 100; // 컴파일 타임 상수일반 계산은 int와 double에서 시작하고, 계약이 있는 정수는 고정 폭 타입으로, 고정된 값은 const/constexpr로 내려가면 됩니다.
문법
C++ 기본 타입 카드에서는 보통 아래를 같이 봅니다.
- 일반 정수와 실수:
int,double - 더 작은/큰 정수 폭:
short,long,long long - 조건 상태:
bool - 크기가 계약인 정수:
std::int32_t,std::uint64_t - 값 고정:
const,constexpr - 타입 생략:
auto - 초기화 방식:
=,(),{}중 주로{}를 우선
char grade{'A'};
int count{42};
long long total_bytes{9'000'000'000LL};
double ratio{0.75};
bool ready{true};
std::int32_t id{1001};
const double pi{3.14159};
constexpr int max_n{100};기본 개념
int, long 같은 기본 타입의 크기는 C++ 표준이 최솟값만 정하고 실제 크기는 플랫폼에 따라 다릅니다. 이식성이 중요한 코드에서는 <cstdint>의 고정 크기 타입을 씁니다.
// 플랫폼마다 다를 수 있는 크기
sizeof(int) // 보통 4, 하지만 보장은 16비트 이상
sizeof(long) // Linux 64비트에서 8, Windows 64비트에서 4
// 크기가 보장된 타입 (이식성 필요 시)
std::int8_t // 정확히 8비트 부호 있음
std::int32_t // 정확히 32비트
std::uint64_t // 정확히 64비트 부호 없음const는 런타임에도 초기화될 수 있는 불변 변수이고, constexpr는 컴파일 타임에 값이 확정됩니다. 배열 크기, 템플릿 인자 등 컴파일 타임에 값이 필요한 곳에는 constexpr를 씁니다.
int n;
std::cin >> n;
const int size = n; // ✅ 런타임 값도 const 가능
// int arr[size]; // ❌ 컴파일 타임이 아님 — VLA는 C++ 표준 아님
constexpr int LIMIT = 1000; // 컴파일 타임 확정
int arr[LIMIT]; // ✅ 배열 크기로 사용 가능C++11부터 권장되는 중괄호 초기화 {}는 좁히기 변환(narrowing conversion)을 컴파일 오류로 막습니다. 값이 손실될 수 있는 암묵적 변환을 미리 잡아줍니다.
double d = 3.14;
int a = d; // ✅ 컴파일 — 하지만 3으로 잘림 (경고만)
int b{d}; // ❌ 컴파일 오류 — 좁히기 변환 거부
int c{42}; // ✅ 정확한 타입
int e{}; // ✅ 0으로 기본 초기화auto는 오른쪽 표현식에서 타입을 추론합니다. 참조와 const는 auto 단독으로는 유지되지 않으므로 명시해야 합니다.
std::vector<int> v{1, 2, 3};
auto a = v; // vector<int> 복사 (참조 아님)
auto& b = v; // vector<int>& 참조
const auto& c = v; // const vector<int>& 읽기 전용 참조
auto it = v.begin(); // std::vector<int>::iterator — 긴 타입 생략선택 기준
- 일반 정수 계산:
int - 일반 실수 계산:
double - 크기 고정이 필요한 정수:
<cstdint>타입 - 런타임 불변 값:
const - 컴파일 타임 상수:
constexpr - 타입이 명확한 지역 변수:
auto - 값 손실을 막고 싶다:
{}초기화 우선
주의할 점
auto는 const와 참조를 자동으로 유지하지 않습니다. 복사를 피하거나 불변을 보장하려면 직접 명시해야 합니다.
const std::string original = "hello";
auto copy = original; // ❌ const 떨어짐 — string 복사본, 수정 가능
auto& ref = original; // ❌ const 떨어짐 — const string& 이어야 함, 컴파일 오류
const auto& view = original; // ✅ const string& — 복사 없이 읽기 전용
// ❌ 정수 좁히기 변환
int x = 3.7; // 3으로 잘림, 경고만
int y{3.7}; // 컴파일 오류 — 의도치 않은 손실 즉시 차단// ❌ 플랫폼 폭을 일반 계산용 int와 같은 감각으로 쓰면 계약이 흐려질 수 있다
int packet_length = 1024;
// ✅ 파일 포맷, 네트워크, 바이너리 계약이면 고정 폭 타입을 먼저 본다
std::uint32_t packet_length_ok = 1024;참고 링크
1 sources