여기서 무슨 일이 일어나고 있습니까?
if(int a = Func1())
{
// Works.
}
if((int a = Func1()))
{
// Fails to compile.
}
if((int a = Func1())
&& (int b = Func2()))
)
{
// Do stuff with a and b.
// This is what I'd really like to be able to do.
}
2003 표준의 섹션 6.4.3은 선택문 조건에 선언 된 변수가 조건에 의해 제어되는 하위 명령문의 끝까지 확장되는 범위를 갖는 방법을 설명합니다. 그러나 나는 그것이 선언 주위에 괄호를 넣을 수 없다는 것에 대한 어떤 것을 말하는지 보지 못하며 조건 당 하나의 선언에 대해서만 언급하지 않습니다.
이 제한은 조건에 하나의 선언 만 필요한 경우에도 성가시다. 이걸 고려하세요.
bool a = false, b = true;
if(bool x = a || b)
{
}
x가 false로 설정된 'if "본문 범위를 입력하려면 선언에 괄호가 필요하지만 (할당 연산자가 논리 OR보다 우선 순위가 낮기 때문에) 괄호를 사용할 수 없기 때문에 외부에 x를 선언해야합니다. 선언문을 원하는 것보다 더 큰 범위로 유출하는 본문입니다. 분명히이 예제는 사소하지만 더 현실적인 경우는 a와 b가 테스트해야하는 값을 반환하는 함수 인 경우입니다.
그래서 내가하고 싶은 것이 표준에 맞지 않는 것입니까, 아니면 컴파일러가 내 공을 파열합니까 (VS2008)?
while
은 if
.
if (int a = foo(), int b = bar(), a && b)
? 쉼표 연산자가 오버로드되지 않은 경우 표준은 표현식이 왼쪽에서 오른쪽으로 평가되고 결과 값이 마지막 표현식이라고 말합니다. for
루프 초기화 와 함께 작동합니다 . 왜 여기에 있지 않습니까?
if
작동 하는지에 대한 제안을 받았는데 잘못된 가정 인 것 같습니다.
if
.if
루프가 아니라 조건부입니다.