갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 프로그래밍 (146)
      • 자바 (9)
      • 안드로이드 (2)
      • 유니티 (20)
      • C++ (38)
      • C# (56)
      • HTML (2)
      • 파이썬 (3)
      • 자료구조 (2)
      • 알고리즘 (0)
      • 문제풀이 (4)
      • 디자인 패턴 (7)
      • 카카오톡 봇 (1)
      • 엑셀 (1)
      • 기타 (1)
    • 게임 (21)
      • 테일즈위버 (0)
      • 카이로소프트 (1)
      • 순위 (19)
      • 기타 (1)
    • 일상 (13)
      • 카페 (1)
      • 방탈출 (12)
    • 기타 (6)
      • 웃긴자료 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • C++ 상속
  • 전세계 게임 매출
  • 강남 방탈출
  • 롤 골드그래프
  • 유니티 그래프
  • c# 코루틴
  • 전세계게임매출순위
  • C# 예외 처리
  • 게임 디자인 패턴
  • 글로벌게임매출
  • 2020년 게임 매출
  • 게임매출순위
  • 유니티 골드그래프
  • 자바
  • 게임 매출 순위
  • c# unboxing
  • 알고리즘
  • C++ virtual
  • c# coroutine
  • c# delegate
  • c# collection
  • C# boxing
  • 유니티 그래프 그리기
  • c# Thread
  • Unity Graph
  • C++
  • pc 게임 순위
  • 모바일 게임 순위
  • pc게임 순위
  • C++ 소멸자

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥

나는야 프로그래머

[C++] 변수(1)
프로그래밍/C++

[C++] 변수(1)

2019. 10. 5. 15:49
728x90
반응형

1. C언어와 다른 C++ 변수의 특징

 - 함수의 중간에서 선언 가능

 - 구조체 사용 시 struct를 표기하지 않아도 된다.

 - 구조체를 만들 때 멤버를 초기화 할 수 있다. - C++ 11이상

 - 2진수 표기법 / 자릿수 표기법

 - C에는 없는 새로운 데이터 타입

struct Rect {
    int x = 0;
    int y = 0; // 구조체 멤버 초기화
}

int main() {
    if(true) {}
    int n = 0; // 함수 이후 변수 선언 가능
    
    Rect rt; // C에서의 struct Rect rt; 에서 struct를 빼도 된다.
    
    int n1 = 10;   // 10진수
    int n2 = 0x10; // 16진수
    int n3 = 010;  // 8진수
    int n4 = 0b10; // 2진수
    
    int n5 = 100'000'000; // 자릿수 표기법 - 꼭 3자리 마다 자르지 않아도 된다. (가독성을 위함)
    
    bool check = true; // bool 타입 - true or false (C99)도 가능
    long long n6 = 100; // 64bit 정수 (C++ 11)
    
    // char16_t - UTF16 (C++ 11)
    // char32_t - UTF32 (C++ 11)
    // char8_t  - UTF8  (C++ 20)
}

 


2. 일관된 초기화

 - 변수를 초기화 할 때 중괄호 { } 를 사용하여 초기화 하는 것

 - 중괄호 초기화(brace-init) 이라고도 표현 

 - C++ 11이상에서 가능

 - 다양한 초기화 방법에서 하나의 통일된 방법으로 초기화가 가능

 - 기존 초기화 단점 : 암시적 형변환에 따른 데이터 손실이 발생할 수 있다.

 - 일관된 초기화 장점 : 데이터 손실이 발생할 경우 컴파일 에러가 발생한다.

 - 함수의 인자로 중괄호 초기화를 사용 할 수 있다. - move({10});

 


3. Auto / Decltype

 - Auto : 우측의 데이터형에 따라 좌측의 데이터형이 정해짐

 - Decltype : 가로안의 데이터형에 따라 변수의 데이터형이 정해짐

int main() {
    int a[3] = {1,2,3};
    // double a[3] = {1,2,3};
    
    auto b = a[0]; // int 나 double 형의 a를 쓰는지에 따라 b의 형이 정해짐
    auto e;        // error
    
    decltype(b) c; // b의 데이터형으로 c가 만들어짐
    decltype(b) d = b; // 초기값 설정 가능
}

 

3.1 배열과 타입 추론

 - Auto : 우변이 배열이면 요소를 가르키는 포인터 타입으로 타입이 결정

 - Decltype : 가로안의 표현식이 배열이면 가로안의 배열과 완전히 동일한 배열 타입으로 결정

                => 이 경우에는 초기화 불가

int main() {
    int n = 10;
    
    auto a = n;    // int
    decltype(n) b; // int
    
    int arr[3] = {1,2,3};
    
    auto a2 = arr; // 1. int a2[3] = arr 로 되지 않음. error / 배열로 초기화 x
                   // 2. int* a2 = arr 는 ok. 포인터로 지정
                 
    decltype(arr) b2;       // int b2[3] 으로 ok.
    decltype(arr) b3 = arr; // int b3[3] = x 로 되지 않음. error
}

 

3.2 Decltype과 함수 호출식

 - decltype(함수명) => 함수 타입

 - decltype(&함수명) => 함수 포인터 타입

 - decltype(함수호출식) => 반환 타입 / 실제로 함수가 호출되는 것은 아님

int move(int a, double b) {
    return 0;
}

int main() {
    move(1, 3.7)
    
    decltype(move) t1;         // 함수 타입 - int(int, double)
    
    decltype(&move) t2;        // 함수 포인터 타입 - int(*)(int, double)
    
    decltype(move(1, 3.7)) t3; // 함수 반환 타입 - int
}

 * 타입을 알아보고 싶다면...

typeid(변수 이름).name() 을 사용하면 된다.

 - <typeinfo> 헤더 파일 필요

 - std::cout << typeid(a).name();


4. Using

 - 기존 타입의 별칭(alias)을 만들 때 사용

 - C++ 11 부터 도입된 문법

C에서의 typedef 와 C++의 using의 차이

 - typedef는 타입의 별칭만 만들 수 있다.

 - using은 타입 뿐 아니라 템플릿의 별칭도 만들 수 있다.

 - 그래서 template alias라고도 부른다.

//typedef int DWORD;
//typedef void(*F)(int, int);

using DWORD = int;
using F = void(*)(int, int);

int main() {
    DWORD = n; // int n
    F f;       // void(*f)(int, int)
}
728x90
반응형

'프로그래밍 > C++' 카테고리의 다른 글

[C++] C언어와 다른 C++ 함수(1)  (0) 2019.10.09
[C++] 변수(2)  (0) 2019.10.05
[C++] iomanipulator  (0) 2019.10.05
[C++] C++ 표준 입출력  (2) 2019.10.04
[C++] namespace 개념  (0) 2019.10.03
    '프로그래밍/C++' 카테고리의 다른 글
    • [C++] C언어와 다른 C++ 함수(1)
    • [C++] 변수(2)
    • [C++] iomanipulator
    • [C++] C++ 표준 입출력
    갓똥
    갓똥
    공부하며 알아가는 내용을 정리해 봅니다.

    티스토리툴바