if 문을 통해 분기하는 영역은 자신만의 스코프를 갖는다. 다음 문장은 오류를 범하고 있다.
if (x < 0.0) int absx = -x; else int absx = x; cout << "|x| is " << absx << "\n"; // 이미 absx는 스코프를 벗어났다.
위 코드에서 absx라는 이름의 변수를 두 번 정의했다. 서로 다른 스코프에 있으므로 충돌이 나지 않는다. 하지만 두 변수 모두 if 문이 끝난 뒤에는 스코프를 벗어나기 때문에 마지막 줄에서 absx에 접근하려고 하면 오류가 발생한다. 실제로 분기문에서 선언한 변수들은 해당 분기 안에서만 사용할 수 있다.
if 문의 각 분기는 하나의 단일문으로 이루어져 있다. 여러 작업을 수행하기 위해 카르다노의 해법처럼 중괄호를 사용할 수 있다.
double D = q * q / 4.0 + p * p * p / 27.0; if (D > 0.0) { double z1 = ...; complex<double> z2 = ..., z3 = ...; ... } else if (D == 0.0) { double z1 = ..., z2 = ..., z3 = ...; ... } else { // D < 0.0 complex<double> z1 = ..., z2 = ..., z3 = ...; ... }