본문 바로가기

개발

중요 문법

'중요' 문법이라고 있어보이게 말하긴 했지만
사실은 그냥 제가 몰랐던 C++문법이예요.
C와 C++의 차이 정도로 볼 수도 있겠습니다.

*이 글은 '전문가를 위한 C++, 마크 그레고리 저' 도서를 읽고 정리한 글입니다.

1. namespace

C언어는 시작할때  `#include <stdio.h>` 이거부터 시작하죠.

 

C++은

#include <iostream>
using namespace std;

이거더라구요.

 

std라는 이름의 namespace를 사용한다는 의미입니다.
std안에는 cout, cin과 같은 함수들을 갖고있는데
전처리기로 using 선언을 해주면 그냥 사용할 수 있지만 그렇지 않은 경우엔
std::cin과 같이 [namespace]::[function]으로 사용해야 해요.

namespace는 같은 이름의 여러 함수를 구별해 사용하기 위한 기능입니다.
만약 헤더파일에 namespace의 using선언을 해버리면 헤더를 include하면 동시에 헤더에서 사용한 namespace가 선언이 될 거예요.
그럼 namespace를 사용하는 의미가 없겠죠?
또 너무 과도하게 많은 namespace를 사용하는 것도 의미 퇴색의 문제가 있어 주의해야 합니다.

 

2.  단락 논리 (Short-Curcuit Logic)

if( A == B || B==C || C == D)

이 경우에 C언어의 경우 모든 연산을 다 하고 || 연산도 마친 후에 결과값을 도출한다.
하지만 C++의 경우 A==B 하나만 true로 나오면 뒤의 연산은 건너뛴다고 해요.
뭔가 컴파일러가 똑똑해진 느낌?

 

3. 함수 정의

[type] [function name]([parameter]) { }

함수 정의의 기본 형태입니다.
하지만 C++에선 템플릿 함수에서 사용하기 위해 다음과 같은 형태를 사용하기도 합니다.

auto [function name]([parameter]) -> [type] { }

여기서 리턴타입은 지정해주지 않아도 됩니다.
auto로 지정해주면 리턴타입은 코드 내 첫 번째 return문에서 리턴하는 값의 타입을 따라갑니다.
단 이를 위해 함수 내 코드에서 첫 번째 return이 재귀일 수 없습니다.

 

4. decltype

설명이 좀 힘들어서 예제로 설명을 대체하겠습니다.

int x = 123;

decltype(x) y = 456;

이 때 y는 int타입으로 선언됩니다.
알아두면 뭔가 쓸모있을듯한 기능입니다.

 

5. class 정의

생성자 : [classname]()

소멸자 : ~[classname]()

class [classname] {

이 태그 내부에는 변수 및 함수에 대한 선언 한다.

}

[classname]::[function name]() { }

선언한 함수에 대한 정의는 태그 밖에서 진행

 

'개발' 카테고리의 다른 글

보기 좋은 코드 작성  (0) 2018.10.14
개발 일지 Prolog  (0) 2018.09.28