일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Friendship
- 패턴인식
- 빅데이터
- 삼성소프트웨어멤버십
- 구글 앱 엔진
- 인공지능
- 갤럭시탭S8울트라
- BAM
- 고려대학교
- 동아리
- SSM
- 파이썬
- 가상화
- NarwalFreo
- 신경망
- 물걸레자동세척로봇청소기
- 물걸레로봇청소기추천
- Google App Engine
- hopfield network
- Python
- 하이퍼바이저
- 패턴 인식
- 증강현실
- Bidirectional Associative Memory
- 삼성전자 소프트웨어멤버십 SSM
- 멤버십
- Neural Network
- 나르왈프레오
- 삼성
- 신경회로망
- Today
- Total
정보공간_1
[6기 수원 최웅엽] 궁금한 c++ 문법들 본문
C++을 공부하며 궁금했던 점과 애매하게 알던 부분을 더 명확히 알아둬야 할 필요성을 느껴 조사해 보았습니다.
1. Call by pointer와 Call by reference
보통 c++의 함수 param으로 reference를 넘기게 코드를 짜는 것을 기본으로 알고 있었습니다. 값 복사에 대한 처리나 개발자가 원하는 방향이라 것 등 여러 가지 이유가 있었기 때문인데 그렇다면 reference와 pointer의 차이는 무엇일까?
간단히 두 가지 예제를 보면 실제 문법 사용에는 큰 차이가 없는 것으로 보입니다. 그리고 여러 방면으로 찾아본 결과 두 차이점에 대한 언어 개발자의 대답 또한 “큰 차이가 없다” 였습니다.
대신 몇 가지 사용상의 차이점이 있는데
1. Operation overloading에서는 reference를 사용해야 일반적인 문법으로
사용할 수 있다
(여기서 일반적인 사용이란, 두 클래스에 대한 + overloading을 사용할
경우 a+b가 실제 + 문법과
비슷하다는 것입니다. Pointer을 사용하면 a+&b로
사용해야 합니다.)
2. Null을 대입할 수 없습니다.
이 외에도 몇 가지 이유가 있지만 결국 사용상의 이슈일 뿐 속도나 문법적 오류에 대한 이슈는 없습니다.
2. Namespace
보통은 using namespace std라는 문법으로 사용하게 되는 namespace입니다. 코드를 적으면서 namespace를 실제 어떻게 사용하는 것인지 고민했던 적이 있습니다.
여기 namespace와 class 그리고 struct를 간단하게 코드로 써 보았습니다.
namespace도 결국 struct와 비슷한 용도로 사용할 수 있다는 것을 알 수 있으며
1. Using namespace로 변수나 함수를 골라서 사용할 수 있으며
2. Namespace를 새로운 이름으로 바꿀 수 있으며
3. 같은 이름으로 확장이 가능하고
4. namespace안에 또 다른 namespace도 적는 것이 가능합니다.
5. 단 이미 적용된 namespace를 취소하는 방법은 문법적으로 제공하지 않습니다.
6. 각자 맡은 파트를 합치는 과정에서 변수나 함수, 클래스 등의 이름이 겹치는 것을 방지하는데 사용할 수 있습니다
정도를 알 수 있었습니다.
3. Inline
보통 header에 많이 사용하는 inline함수 입니다. 중요한 것은
1. 개발자가 inline으로 선언한다고 해서 컴파일러가 반드시 inline화를 시키는 것은 아니라는 점.
2. 짧은 코드는 컴파일러가 알아서 inline화를 한다는 점.
3. 무분별한 inline을 사용하면 큰 함수는 캐시나 페이징의 hit 확률을 떨어뜨려서 오히려 느려질 수 있다는 점
을 알 수 있었습니다.
4. Smart_ptr
스마트 포인터란, java의 가비지 컬랙터의 장점을 가져온 c++의 새 기능을 말합니다. 이 특별한 포인터는 참조 수를 카운트하여 카운트가 0이되면(사용을 하지 않으면) 스스로 메모리를 해제하게 됩니다.
보통 shared_ptr과 unique_ptr을 사용하고 이를 관리하기 위해 weak_ptr도 사용하게 됩니다.
1. unique_ptr은 포인터를 공유하지 않습니다. 값의 전달이나 복사가 불가능하고 이동만 가능합니다.
2. shared_ptr은 포인터를 공유할 수 있습니다. 단 unique_ptr의 기능만을 원할 경우에는 unique_ptr을 사용하는 것이 속도면에서 좋습니다.
5. Thiscall
Class 내부에 구현한 static 함수를 함수포인터로 지정하면서 애를 먹었던 적이 있습니다.
이 때 어떤 방법으로 member함수가 구현되는지 궁금했습니다.
위의 함수를 보면 멤버 함수가 실제로는 this가 파라미터로 전달되는 것을 알 수 있습니다. 그렇기 때문에 함수에서 자기 class의 변수들에 접근이 가능한 것입니다.
static은 this가 전달되지 않기 때문에 static으로 지정되지 않은 변수에는 접근이 불가능한 것입니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[6기 강북 전영진] 리눅스 커널 심층 분석 #0 (0) | 2014.08.07 |
---|---|
[6기 수원 조성찬] Arm cortex-M3 기본 개요 (0) | 2014.08.07 |
[6기 대구 허정욱] Detours 3.0 Express #1.API Hooking (0) | 2014.08.07 |
[6기 강북 홍진우] 64비트 멀티코어 OS#1 - 개발환경, 운영모드 (0) | 2014.08.07 |
[6기 강남 윤재석] Google I/O 2014 그곳에 내가 있었다. (1) | 2014.08.07 |