나는 예외를 참조보다는 상수에 대한 참조로 포착하는 것이 더 낫다는 것을 여러 번 듣고 읽었습니다. 이유 :
try {
// stuff
} catch (const std::exception& e) {
// stuff
}
보다 낫다 :
try {
// stuff
} catch (std::exception& e) {
// stuff
}
답변
다음이 필요합니다.
- 다형 적으로 예외에 액세스 할 수있는 참조
- 성능을 높이고 컴파일러에게 객체를 수정하지 않을 것임을 알리는 const
후자는 전자 만큼 중요하지는 않지만 const를 삭제하는 유일한 이유는 예외를 변경하고 싶다는 신호를 보내는 것입니다 (일반적으로 컨텍스트를 추가하여 더 높은 수준으로 다시 던지고 싶은 경우에만 유용함). .
답변
기본적으로 전혀 이유가 없습니다.
예외 객체는 자체 메모리 공간에 상주 하므로 † 임시 표현식에서 생성 된 예외를 포착하는 것에 대해 걱정할 필요가 없습니다.
당신이하고있는 모든 당신이 예외 객체를 수정하지 않습니다 것을 약속하지만, 예외 객체는 불변의 인터페이스를 가지고 있어야하기 때문에 ‡ , 여기에 실제 아무것도 정말 없다.
하지만 읽을 때 따뜻하고 아늑하게 느껴질 수도 있습니다. 그게 저를위한 것입니다!
† 고유 한 특수 스레드 로컬 스택이 있습니다.
‡ 면책 조항 : Boost.Exception은 펑키 한 작업을 수행하고 예외 세부 정보를 추가하기 위해이를 중단합니다. 그러나 이것은 해커 리입니다!
답변
코드를 최적화하는 데 도움이 될 수있는 예외를 수정하는 함수를 호출하지 않을 것임을 컴파일러에 알립니다. 아마도 큰 차이는 없지만 비용도 매우 적습니다.
답변
예외를 수정 하시겠습니까? 그렇지 않으면 const 일 수도 있습니다. 다른 곳에서는 const를 사용해야하는 것과 같은 이유입니다.
예외 처리기는 플랫폼에 따라 다를 수 있으며 변경 될 것으로 예상하지 않기 때문에 재미있는 장소에 예외를 둘 수 있습니까?
답변
같은 이유로 const를 사용합니다.