-
[Effective C++] 1. C++를 언어들의 연합체로 바라보는 안목은 필수C_C++ 프로그래밍/Effective C++ 2019. 8. 26. 15:45
로재의 개발 일기
C++은 언어들의 연합체
c++을 잘 사용하기 위해서는 c++을 하나의 언어로 보기보다는
c++을 하나의 연합체로 보는 것이 좋습니다.
즉 c++이 여러 개의 하위 언어를 제공한다는 점을 제기하는 것입니다.
그렇다고 막연한 이야기는 아닙니다. 4개 밖에 없기 때문이죠.
1. C
C++은 여전히 C 기반이기 때문에, C만 쏙 빼서 사용이 가능합니다.
하지만, 이렇게 개발을 하기 된다면 효과적인 프로그래밍을 위한 규칙을 적용할 수 없게 됩니다.
템플릿도 없고, 예외도 없고, 오버로딩도 없고.... 등등 말입니다..
2. 객체 지향 개념의 C++
'클래스를 사용하는 C'에 관한 이야기입니다.
생성자와 소멸자, 캡슐화, 상속, 다형성, 가상 함수(동적 바인딩)까지 포함합니다.
3. 템플릿 C++
요즘 어지간히 괜찮은 C++ 프로그램이라면 템플릿 구문을 하나 쯤 발견할 수 있습니다.
이 템플릿의 강력함이 너무 크다보니 새로운 프로그래밍 메타가 나왔으니
이름하여 '템플릿 메타프로그래밍' (TMP)라고 불리우게 됩니다.
4. STL
STL은 이름에서 알 수 있듯이 템플릿 라이브러리입니다.
하지만 대단히 특별하며, 컨테이너 알고리즘 함수 객체 벡터 등등
다양한 규약을 가지며 많은 프로그래머들이 사용하고 잇습니다.
pass by value vs pass by reference
이 부분은 대부분의 개발자들은 값에 의한 참조가 효율적이라고 생각할 겁니다.
passbyvalue.cpp
1234567891011121314151617181920#include<iostream>// argument x is pass by function addOnevoid addOne(int x);int main(){int value;std::cout << "Insert any number" << '\n';std::cin >> value;addOne(value);return 0;}void addOne(int x){x++;std::cout << x << '\n';}cs passbyreference.cpp
12345678910111213141516171819#include<iostream>// argument x is pass by referencevoid addOne(int &x);int main(){int value;std::cout << "Insert any number" << '\n';std::cin >> value;addOne(value);return 0;}void addOne(int &x){x++;std::cout << x << '\n';}cs 하지만! C++은 여러 언어의 연합체이기 때문에
어떻게 쓰는 가에 따라서 장단점이 나뉘게 됩니다.
C style, STL => 값에 의한 참조가 유리하게 작동합니다.
객체 지향 C++, 템플릿 C++ => 참조자에 의한 전달이 유리해 집니다.
참조에 의한 전달입니다.
12345// v is reference valuevoid addOne(int& v){v = v + 1;}cs 하지만 const reference value를 사용하면
값을 변경할 수 없게 됩니다. (컴파일 에러)
12345// v is const reference valuevoid addOne(const int& v){v = v + 1; // const는 값을 변경할 수 없다.}cs ※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
반응형'C_C++ 프로그래밍 > Effective C++' 카테고리의 다른 글
[Effective C++] 5. C++이 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 (0) 2019.09.05 [Effective C++] 4. 객체를 사용하기 전에 반드시 객체를 초기화하자 (0) 2019.09.03 [Effective C++] 3. 낌새만 보이면 const를 들이대 보자! (0) 2019.08.29 [Effective C++] 2. #define을 쓰려거든 const enum, inline을 떠올리자. (0) 2019.08.28