c + + 11 안의 noexcept

1407 단어
프로젝트 에 JSon 의 cpp 라 이브 러 리 를 추가 합 니 다. 원작 자 는 C + + 11 기술 을 많이 사용 하여 GCC 와 Vs 2015 에서 컴 파일 할 수 있다 고 말 했 습 니 다.저 는 Vs 2013 입 니 다. 예상 치 못 한 많은 오류 가 발생 했 습 니 다. 주로 이 키워드 noexcept 입 니 다.
c + + 11 이전의 이상 처 리 를 복습 합 니 다. 우 리 는 어떤 이상 도 버 리 지 않 기 를 원한 다 면.
virtual const char* what() throw(); 

이렇게 하면 이상 이 있 으 면 * std:: unexpected 마지막 std:: terminate * * 를 직접 호출 합 니 다. 그러나 C + + 11 에 이 르 러 이상 의 용법 은 버 려 집 니 다. - (키워드 noexcept 를 도 입 했 기 때문에 다음 과 같은 형식 으로 바 꿔 야 합 니 다. (둘 은 작은 차이 가 있 지만)
virtual const char* what() noexcept;

안 타 깝 게 도 제 Vs 2013 은 C + + 11 을 완전히 지원 하지 못 하기 때문에 오류 가 불가피 합 니 다. 사실은 코드 에 다음 과 같은 호환성 디자인 이 있 으 면 좋 을 것 입 니 다. (누가 MSVC 를 사용 하 라 고 했 습 니까?)
#ifndef _MSC_VER
#define NOEXCEPT noexcept
#define NOEXCEPTX noexcept
#define NOEXCEPT_OP noexcept
#else
// MSVC2013 does not support noexcept specifier, nor noexcept operator.
// https://msdn.microsoft.com/en-us/library/wfa0edys.aspx
// It provides related macros _NOEXCEPT, _NOEXCEPT_OP. 
// _NOEXCEPT --> throw()
// _NOEXCEPT_OP is a no-op in MSVC2013.
// _NOEXCEPT isn't compatible with the following construction ctor() noexcept = default. 
// That's why I've defined NOEXCEPTX
#define NOEXCEPT _NOEXCEPT
#define NOEXCEPTX
#define NOEXCEPT_OP(x) _NOEXCEPT_OP(x)
#endif

또 다른 문 제 를 해결 해서 제 이 슨 hpp 가 Vs 2013 에서 컴 파일 에 성공 하 게 되 었 습 니 다.

좋은 웹페이지 즐겨찾기