선언 영역 말 그대로 선언을 할 수 있는 영역입니다. 예를 들어 전역 변수는 모든 함수의 바깥에서 선언할 수 있습니다. 그 변수의 선언 영역은 그것이 선언된 파일입니다. 또한 어떤 변수를 함수 안에 선언한다면 그 변수의 선언 영역은 그것이 선언된 블록입니다. namespace 새로운 종류의 선언 영역을 정의함으로써 이름이 명명된 namepsace를 만들 수 있다는 기능이 c++에 추가되었습니다. 하나의 namespace에 속한 이름은 동일한 이름의 다른 namespace에 선언된 이름과 충돌하지 않습니다. namespace는 전역 위치 또는 다른 namespace에 놓일 수 있습니다. 이는 namespace가 상수 참조를 하지 않는다면 기본적으로 외부 링크를 갖게 됩니다. (const는 static 하므..
함수사용의 조건 함수를 사용하기 위해선 함수정의와 원형을 제공하고 호출코드를 작성해야합니다. 라이브러리 함수를 사용한다면 이미 해당함수는 정의되어 컴파일이 되어있습니다. 그 원형을 제공하기 위해 우리는 헤더파일을 사용합니다. 함수원형의 필요성 함수의 정의안에 이미 원형이 포함되어 있는데 왜 우리는 굳이 정의와 원형을 나누어 제공을 해야할까요? 첫번째 이유를 이해하기 위해선 함수의 작동방식에 대해 이해할 필요가 있습니다. 호출된 함수는 자신의 리턴값을 CPU의 레지스터나 메모리에 복사하는 방식으로 값을 리턴합니다. 호출된 함수는 함수의 정의를 확인하여 해당 위치에 어떤 값을 리턴해야하는지 알게 됩니다. 그리고 호출한 함수는 함수의 원형을 확인하여 해당위치에서 어떤 값을 가져와야 하는지를 확인합니다. 해당 ..
함수 템플릿 함수 템플릿은 함수의 일반화 서술입니다. int나 double형과 같은 구체적인 데이터형을 포괄하는 일반형으로 함수를 정의합니다. 어떠한 데이터형을 템플릿에 매개변수로 전달하면 컴파일러는 그 데이터형에 맞는 함수를 생성합니다. 필요성 기존에 int 두 개를 더하는 함수를 작성했다고 합시다. 그리고 double형 두 개가 주어졌을 때 더하려고 합니다. 함수 오버로딩을 통해 매개변수 리스트를 달리하여 해결할 수도 있습니다. 하지만 이러한 상황이 반복적으로 일어난다면 함수 작성 도중 실수할 수도 있을뿐더러 시간 또한 낭비됩니다. c++ 함수 템플릿 기능은 이 과정을 자동화해줍니다. 다음은 함수 템플릿을 설정하는 코드입니다. template Any custom_add(Any a, Any b) { r..
일반적인 함수의 작동 컴파일 작업의 최종 산출물은 기계어 명령으로 이루어진 실행 프로그램입니다. 프로그램 실행 시 운영체제는 이 명령들을 컴퓨터의 메모리에 로드하고 각 명령들은 자신의 주소를 갖게 됩니다. 프로그램에서 함수의 호출이 이루어진다면 함수 호출 명령 다음에 있는 명령의 주소를 메모리에 저장하고 스택에 매개변수를 복사합니다. 그 후 호출한 함수가 시작되는 위치로 이동하게 됩니다. 호출된 함수는 실행되고 자신의 리턴 값을 레지스터에 복사하고 저장해두었던 주소의 명령으로 돌아오게 됩니다. Inline 함수의 필요성 및 특징 이렇게 자신이 돌아올 위치를 기억하고 점프를 수행했다가 돌아오는 행동은 함수를 사용하는데 시간이 많이 걸립니다. Inline 함수는 컴파일러가 함수호출 부분을 그에 대응되는 함수..
- Total
- Today
- Yesterday
- union find
- 동적계획법
- 2-SAT
- 이분탐색
- 정렬
- spring
- Oracle
- dijkstra
- kmp
- spring boot
- implementation
- dfs
- Fenwick
- sweeping
- DP
- 좌표압축
- hld
- Suffix Array
- 펜윅트리
- knapsack
- sorting
- 세그먼트트리
- greedy
- 스위핑
- string
- 이분매칭
- SCC
- bfs
- Segment tree
- 트라이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |