Ch05. 흐름제어 - 01. if 문 (자바와 c++이 다른점, 유의점)
c++에서 조금 특이한 부분에 대해서 확인해보자면 C++에서는 조건부 초기화 문법이란게 있는데 이게 뭐냐면
if (~) 안에는 원칙적으로 표현식(expression)이 와야 하지만 예외적으로 if (int num = 1) 처럼 변수 선언과 초기화가 가능하게 해둔 것을 말한다.
그래서
이런 방식의 사용이 가능하다
보면 int num = 1 의 결과로 num 자체를 반환하면서 if 의 조건문이 1을 만나면서 true로 내부의 statement를 실행시켜주는 것을 볼 수 있다.
그리고 저 num의 경우는 if 문 내부에서만 사용이 가능한 변수로써 사용이 되어 외부에서 num을 접근하려고 한다면
이렇게 변수가 선언되지 않았다고 알린다.
추가로 c++ 17 이후 부터는
if (init-statement; 조건식) { ... }
이런 사용도 가능한데 이건
if (int x = getValue(); x > 0) {
std::cout << "x is " << x << std::endl;
}
이런 식의 사용이 가능하게 만들어준다.
나는 지금 안되는데 이 경우에 컴파일러를 변경해서 사용해볼 수 도 있다
컴파일러를 변경하는 방법은 프로젝트 오른쪽 클릭을 하고 속성을 눌러주고
일반 - C++ 언어 표준으로 가서
C++ 17을 선택해주고
적용해보면
이렇게 허용을 해주는것을 볼 수 있다.
예전 컴파일러에서는 안되니 이런 방식을 사용하는것은 아직 시기 상조일 수 도 있다.
잘 판단해서 사용하길바란다.
그런데 그러면
이건 왜 사용이 안될까?
이 부분은 표현식이 아니라 선언문이기 때문이라고 한다.
if , while, switch, for문에 들어가는 선언문이 가능한건 특별하게 예외로 허용된 범위이기에 사용이 가능하지만 이 경우( if , while, switch, for문의 조건절내부에 선언문이 들어가는 경우)를 제외한 선언문을 활용할 수 있는 방법은 없다는것 같다.