취미로 음악을 하는 개발자

[C++] 스타일 함수, 문법 본문

공대인/C[++]

[C++] 스타일 함수, 문법

영월특별시 2019. 4. 7. 20:13
728x90


1. 변수 선언

C++에서는 초기화를 할 때 아래처럼 나타낼 수 있다고 한다. 

a = 10; => a10);

주의할 점은 int a(10)에서 앞에 int 처럼 타입을 정해주지않으면 함수와 헷깔리게 생각할 수 있으므로 타입을 잘 정해줘야하는 것 같다.


int &b = a; // 레퍼런스 변수

레퍼런스 변수는 실제 메모리 상에 존재하는 주소를 가리키는 변수인데 선언되지 않은 것을 가리킬 수 없다.

아래에서 다시 한번 언급하겠지만 이 때, b는 L-value라고도 한다.

ex) 계산식, 숫자나 문자 등


2. -value, r-value

이 부분에 대해서는 처음 들을 때도 이해가 안됐고 지금도 다 이해가 되지는 않지만

https://bunhere.tistory.com/409 이쪽 링크를 참조하면서 천천히 이해해보고 있습니다.


a = 10;

위와 같은 식이 있을 때, a는 L-value, 10은 R-value라고 한다. 물론 좌항은 L-value, 우항은 R-value라는 것은 아니다. ex) a = b일 때 둘다 L-value다.

따라서 L-value의 정확한 의미는 '수정할 수 있는 값', R-value는 '수정할 수 없는 값'이라고 정의가 된다. 

여기서 나는 R-value의 정의와 const의 차이가 궁금했다. const는 상수값으로 만들어주는 키워드이다. '수정할 수 없는 값' 과 '상수 값'.. 다른건가?

그래서 찾은 사이트가 https://modoocode.com/189 이곳이었다.


L-value를 안다면 R-value는 L-value가 아닌 값들이다. 대표적인 것이 수식인데 이렇게 생각하니까 더 빨리 이해가 되었다.

const는 변수를 수정할 수 없게 상수로 선언하게 해준다. R-value는 '2*a' 같은 수식인데 const를 선언하게 되면 그 수식 값으로 선언된 값을

변경할 수 없게 만들어 주는 것이었다.

L-value, R-value에 대해서는 추후에 따로 정리해보면서 글을 올릴 것이다.


3. 범위 기반 for문

나는 평소에 Java를 쓰다가 최근에 C++을 배우게 되었다. 이 부분에 대해 배울 때는 Java의 For-each 문을 사용했던 게 떠올랐다.

int arr[10] = {3, 4, 5, 2, 4, 5, 2, 3, 5, 7};
 for (int i = 0; i < 10; i++) {
cout << arr[i] << endl;
}

보통 배열을 만들고 값을 출력한다고 한다면 이런 형식일 것이다.

하지만 우리는 배열을 대상으로 할 때 좀 더 단순할 수 있는 방법이 있다.


int arr[10] = {3, 4, 5, 2, 4, 5, 2, 3, 5, 7};
for (int n : arr) {
cout << n << ' ';
n++;
}

(int n : arr) 이 부분에서 변수 n은 arr 배열에 있는 원소를 가리키는데 index가 0인 것부터 끝까지 하나씩 가리킨다. (다른 조건이 없다고 가정)

당연 이 때의 반복횟수는 arr의 원소 개수만큼일 것이고 그 횟수만큼 for문 안에 있는 명령어들이 실행될 것이다.


프로그래밍을 배운지는 어느덧 6년차이고 C++을 알게된 것은 5년차지만 쓸 일이 없다고 생각해서 평소에 쓰던 Java만 썼었다.

군대도 다녀오고 나름 프로그래밍도 재밌어서 간간히 Java로 문제도 풀곤 했는데 이게 맞는건가 저게 맞는건가 고민하다가 2~3년이 흘러갔다.

지금은 이전과 다른 목표가 생겼고 그 목표에는 C++이 필요하기때문에 하루에 하나라도 알아가면서 또 이 블로그도 운영해가본다는 생각으로

배우고 적어도 이번 학기 끝나고나서는 어떤 작품 하나가 만들어보고 싶다.



'공대인 > C[++]' 카테고리의 다른 글

[C++] 객체 생성과 소멸  (0) 2019.05.05
[C++] 클래스  (0) 2019.04.23
[C++] Namespace  (0) 2019.04.12
[C++] 스타일 함수 심화  (0) 2019.04.11
개념 및 링크, 나중에 정리해서 글 써보기  (0) 2019.04.07
Comments