태그 보관물: constants

constants

상수에 대한 참조로 예외를 포착하는 이유는 무엇입니까? 읽었습니다. 이유 : try {

나는 예외를 참조보다는 상수에 대한 참조로 포착하는 것이 더 낫다는 것을 여러 번 듣고 읽었습니다. 이유 :

try {
    // stuff
} catch (const std::exception& e) {
    // stuff
}

보다 낫다 :

try {
    // stuff
} catch (std::exception& e) {
    // stuff
}



답변

다음이 필요합니다.

  • 다형 적으로 예외에 액세스 할 수있는 참조
  • 성능을 높이고 컴파일러에게 객체를 수정하지 않을 것임을 알리는 const

후자는 전자 만큼 중요하지는 않지만 const를 삭제하는 유일한 이유는 예외를 변경하고 싶다는 신호를 보내는 것입니다 (일반적으로 컨텍스트를 추가하여 더 높은 수준으로 다시 던지고 싶은 경우에만 유용함). .


답변

기본적으로 전혀 이유가 없습니다.

예외 객체는 자체 메모리 공간에 상주 하므로 임시 표현식에서 생성 된 예외를 포착하는 것에 대해 걱정할 필요가 없습니다.

당신이하고있는 모든 당신이 예외 객체를 수정하지 않습니다 것을 약속하지만, 예외 객체는 불변의 인터페이스를 가지고 있어야하기 때문에 , 여기에 실제 아무것도 정말 없다.

하지만 읽을 때 따뜻하고 아늑하게 느껴질 수도 있습니다. 그게 저를위한 것입니다!

고유 한 특수 스레드 로컬 스택이 있습니다.
면책 조항 : Boost.Exception은 펑키 한 작업을 수행하고 예외 세부 정보를 추가하기 위해이를 중단합니다. 그러나 이것은 해커 리입니다!


답변

코드를 최적화하는 데 도움이 될 수있는 예외를 수정하는 함수를 호출하지 않을 것임을 컴파일러에 알립니다. 아마도 큰 차이는 없지만 비용도 매우 적습니다.


답변

예외를 수정 하시겠습니까? 그렇지 않으면 const 일 수도 있습니다. 다른 곳에서는 const를 사용해야하는 것과 같은 이유입니다.

예외 처리기는 플랫폼에 따라 다를 수 있으며 변경 될 것으로 예상하지 않기 때문에 재미있는 장소에 예외를 둘 수 있습니까?


답변

같은 이유로 const를 사용합니다.


답변