'중요' 문법이라고 있어보이게 말하긴 했지만
사실은 그냥 제가 몰랐던 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 |