C++과 변수

hyomkim·2021년 2월 23일
0

C++

목록 보기
2/2

C++이 되면서 변수체계에도 몇가지 변화가 생겼습니다.

오늘은 C++의 변수에 대하여 정리해 보겠습니다.

변수 선언

C++로 오면서 변수의 선언 형식이 바뀌었습니다.
(물론 이전의 C형식도 사용할 수 있습니다.)

ex) int형 변수 a를 선언하면서 초기값 10을 줄 때
C : int a = 10;
C++ : int a(10);

int (10)처럼 변수의 이름이 없는 변수도 선언이 가능합니다.
다만 해당 변수는 일종의 상수처럼 사용됩니다.

자료형

C에서 C++이 되며 기존에 없던 자료형이 몇 가지 생겼습니다.

  • longlong : 64비트의 정수
    64비트크기의 정수를 저장할 수 있는 크기의 자료형 입니다.
    컴파일러에 따라 차이가 있을 수 있습니다.

  • char16_t : 16비트 문자
    유니코드 중에서 utf-16유니코드 한 문자를 저장할 수 있는 자료형 입니다.

  • char32_t : 32비트 문자
    유니코드 중에서 utf-32유니코드 한 문자를 저장할 수 있는 자료형 입니다.

  • decltype(변수) : 변수와 같은 자료형
    괄호 안에 들어간 변수와 같은 자료형으로 선언합니다.

    ex)
    int x(10);
    decltype(x) y(20); // x와 같은 int타입의 변수 y를 선언

그리고 밑에서 따로 설명 할 auto라는 자료형도 추가되었습니다.

auto

C에서의 auto 지역변수 선언에 사용되는 기억 분류 지정자였습니다.
하지만 어차피 변수에 아무것도 설정하지 않으면 자동으로 auto가 되기에 아무도 사용하지 않았습니다.

그래서 C++에서 기존의 auto를 새로운 자료형으로 추가했습니다.

C++11 표준에서 추가된 자료형인 auto컴파일러가 입력된 값에따라 자료형을 결정하는 자료형입니다.

  • 변수 선언 형식
    C 형식 : auto 변수명 = 초기값;
    C++ 형식: auto 변수명(초기값);

ex) auto변수의 초기값 안에 10이 들어오면 컴파일러는 auto를 int로 처리합니다.

auto는 이렇게 컴파일러에게 자료형의 선택을 떠넘겨 버리는 자료형입니다.
이렇게만 보면 auto는 가끔 편하게 쓰기 좋은 변수 정도로 생각될수 있습니다.

하지만 여기서 변수의 값을 복사하는 개념과 함께 쓰이면 auto의 진정한 능력이 발휘됩니다.

auto자료형은 초기값이 다른 변수의 값을 복사해오는 것일 경우, 컴파일러가 auto의 자료형을 원본이 되는 변수의 자료형으로 설정합니다.

ex) 아래의 코드에서 변수 b에 저장되는 값은 10이며, 컴파일런느 b의 자료형을 a와 같은 int로 처리합니다.

int a(10);
auto b(a); // b에 a의 값을 복사

위의 복사방식에서 얻을 수 있는 장점은
개발자가 복사하고싶은 변수의 자료형을 알 필요가 없다. 입니다.
(decltype 자료형을 사용해도 상관 없습니다!)

기존 C에서는 a의 값을 b에 저장하기 위해선 b를 a와 같은 int로 선언해야 하기에, a의 자료형이 무엇인지 개발자가 알 필요가 있었습니다.
하지만 auto를 사용한 방식에선 a의 자료형이 무엇인지 개발자가 알지 못하더라도 컴파일러가 자동으로 b를 a의 자료형과 똑같이 처리해줍니다.

함수 포인터를 사용할 때도 auto는 선언 자체를 굉장히 간편하게 해줍니다.

ex) 함수 포인터 선언해보기
함수 : void testFunc(int, char)
C : void(
funP1)(int, char*) = testFunc;
C++ : auto funP2(testFunc); // 함수 포인터 선언이 압도적으로 간편합니다.

Reference :
https://docs.microsoft.com/ko-kr/cpp/cpp/char-wchar-t-char16-t-char32-t?view=msvc-160
https://modoocode.com/294
https://www.youtube.com/watch?v=9ZhnXzr9bEQ&list=PLVsNizTWUw7EngGgS-7jWdgy5NgkIjHxz&index=2
이것이 C++이다(최성호 지음)

profile
C++을 좋아하는 조금 모자란 사람이랍니다!

0개의 댓글