사실... 이번챕터는 반복문에관한 내용이라 새롭게 배우는건 많이 없었다.
하지만, 생각해볼 부분이 있어서 해당부분에 대해 글을 작성.
조건문시, 왼쪽부터 연산하고 해당 조건이 반드시 참인경우 모든 조건문을 검사하지 않는다.
if (조건1 | 조건2 | 조건3 | ...) {...}
인 경우, 조건1
만 만족하면 그 이후에 것은 검사하지 않는다고 하는데... C로 과제할때는 확인했던거 같은데??
#include <iostream>
int main() {
char *str = 0x0000;
int i = 0;
if (i == 0 || str[0] == '\n') {
std::cout << "con" << std::endl;
}
return 0;
}
=> con이 잘 출력된다... 분명 c과체할때 이게 안되서 때려쳤던 기억이 있는데... c++와서 바꿨나?
프로그램이에서 일반적으로 카운팅시 1
부터 시작하는게 아니라 0
부터 시작한다. 0
부터 시작하여 n
개를 카운팅한다고 하면, 인덱스는 n-1
까지 증가한다. 이를 수학적으로 나타내면 [0, n)
이고, 반 개방 범위라고한다.
0
부터 시작하게 하여, 비대칭적인 반 개방 범위를 반복문에서 사용시 while(i < n)
이나 for(int i = 0; i < n; i++)
형태로 표현하게 되는데, 이는 다음과 같은 이점들이 있다.
while(i <= n-1)
, while(i + 1<= n)
같은 형태로 표현될수 있는데, 이는 언더/오버플로우를 유발할수 있다.!=
를 사용할수 있게 된다.[0, n-1]
인 경우 반복조건을 판단하기 위해 i <= n-1
만 사용할수 있지만,[0, n)
인 경우 반복조건을 판단하기 위해 i < n
뿐만 아니라 i != n
도 사용할수 있다.i != n
을 사용했을때 이점은 출력값이 명확하게 n번 실행됬다는 것을 알수 있다. 2-10
int main() {
int k = 0;
while (k != 10) {
using std::cout;
cout << "*"
++k;
}
std::cout <<std:;endl;
return 0;
}
using
의 범위에 대해 생각해볼수 있는 문제이다. using
이 유효한 범위는 한 중괄호 내부에서이다. 따라서 반복문이 한 번 끝날때마 using
은 무효가되고, 다시 반복문이 시작되면서 using std::cout;
이 이 동작하여 std::
없이 cout
을 사용할수 있게 된다.