https://nybot-house.tistory.com/92#comment15051682 함수/메서드 컴퓨터 과학에서 함수란? 함수(function), 서브루틴(subroutine), 루틴(routine), 메서드(method), 프로시저(procedure)는 소프트웨어에서 특정 동작을 수행하는 일정 코드 부분이다. 즉, '특정한 작업을 위해 nybot-house.tistory.com 위 게시글에서 ref 와 out을 잠시 언급했었다. 메서드에서 ref 와 out 키워드를 사용하면 pass by value가 아니라 pass by reference가 된다. 이는 메서드가 전달된 매개변수 값을 수정할 수 있다는 의미이다. (잘 모르겠다면 https://nybot-house.tistory.com/49). 1..
함수
class에서 사용되는 static은 앞선 챕터에서 다루었던 빌드의 링크 프로세스에서 사용되는 static과는 다른 의미이다. static의 사용 예시는 다음과 같은 3가지 경우로 나누어 볼 수 있다. 1. static member function (static 멤버 함수) 2. static member variable (static 멤버 변수) 3. static variable in a function. (함수 안의 static 변수) 1. static member function 1) static member function은 object와 연관되어 있지 않다! 이 코드에서처럼 멤버 함수는 굳이 object를 만들지 않아도 콜 할 수 있다. 멤버 함수가 굳이 객체를 만들지 않아도 콜 할 수 있는 이유..
RVO 가 일어나게 되면, 앞서 배웠던 소유권의 이전(move)이 발생할 필요 없이 0 copy 를 달성해 낼 수 있다. 함수의 return 값을 value로 하게 되면(return by value) RVO가 개입되며 가장 효율적인 할당을 해낼 수 있다는 것이다. 다음의 코드를 보면, 프로세스는 이렇게 진행될 것이라 생각하기 쉽다. 심지어 이럴 때 std:move() 를 사용해서 copy를 없애주고자 하는 사람도 있다. 하지만, 실제로는 RVO가 개입된다. : 실제로 컴파일러는 Return Value Address가 a를 가리키고 있다는 것을 알고 있다. 따라서 결국 함수공간 안에 힙 공간에 문자열을 만들고 a가 직접 이 공간을 가리키도록 만들어 놓는다. 함수가 끝나고 해제되며 우측 그림처럼 된다. RV..
1. Pass by Value a 가 Pass by Value 되며 카피되면서 foo 에 a=0 이 들어가게 되고, 로컬변수 b는 a+1이니까 1이 들어가게 된다. 결국 값이 복사가 되는 것. 2. Pass by Pointer 함수에서 매개변수로 포인터를 받게 되면, 이 포인터는 함수 바깥에 있는 변수에 접근 가능하다! 만약 예를 들어서, fooP() 에 *ap = 100 을 써주게 되면 어떻게 될까? fooP가 동작할 때 a 공간에 접근을 해서 값을 100으로 바꿔주는 코드가 된다. (접근 가능!) 3. Call by Reference 레퍼런스를 받는 fooR() 함수를 만들어주고 콜 해 주는 코드를 짜 보자. 사실 포인터로 넘겨주는 함수와 레퍼런스로 넘겨주는 함수 두 개는 똑같다. Compiler E..
주소(address) : C++에서의 주소란, 메모리 위치를 직접 가리킬 때 사용되는 메모리에서의 '주소'를 의미한다. 컴퓨터 안에서 사용되는 주소이기 때문에 16진수를 사용하여 0x1000, 0x1004... 이런 식으로 표현하는 경우가 많다. 인간과 컴퓨터를 비교해 보면, cpu를 두뇌로 메모리를 노트로 생각해 볼 수 있는데, cpu(머리속)에 있는 변수와 객체 등등의 개념을 사용하려면 메모리(노트)에 올려놓고 써야만 한다. 이때 노트에 쓴 것들의 위치가 존재하듯이 메모리를 할당해야만 한다. 그래서 그 메모리마다 고유의 주소를 갖게 되는 것이다. 1. 주소 변산자 & - 변수의 주소(메모리에서의 위치) 확인하기 변수값이 메모리의 어느 부분에 저장되어 있는지 그 주소를 확인할 때에는 주소 변산자(add..