이 매우 안전하다, 내가 함께 작업 한 모든 컴파일러에이"부울 단락"은 표준에 따라 결정되거나 주로 최적화로 사용됩니까?
Class* p = NULL;
if(p != NULL && p->Method() == OK){
// stuff
}
을 고려하십시오. 나는. 부울 식의 첫 번째 부분은 거짓으로 계산되므로 두 번째 부분을 평가하는 것이 불필요하므로 Method() 호출을 시도하지 않습니다.
대부분의 컴파일러가 두 번째 파트의 최적화를 최적화하거나 C/C++ 표준의 지시대로 동작하기 때문에이 방법이 가능합니까?
여기서 간단한 설명을 추가하기 만하면 컴파일러는 표준에 의해 허용되지 않는 경우 아무렇지도 않게 최적화하지 않을 것입니다. 컴파일러의 임무는 표준을 따르는 것처럼 행동하는 코드를 생성하는 것입니다. 따라서 컴파일러는 프로그램의 동작에 영향을 줄 수있는 코드를 최적화해서는 안됩니다. – jalf
글쎄, 난 사람이 자신의 질문을 전에 dup로 닫는 투표를 본 적이. 나는 당신이 그 배지를받을 가치가 있다고 생각합니다! –
@Paul : 건배. 그러나 처음부터 무엇을 검색해야할지 몰랐기 때문에 이것은 특별한 경우이기도합니다. – sharkin