2016-06-22 3 views
3

큰 C++ 코드 기반을 상속 받았으며 마침내 64 비트 Red Hat 7 (gcc 버전 4.8.5 20150623)에서 컴파일 및 실행했습니다.C++ 98 코드를 C++ 11로 업그레이드

기본적으로 프로젝트의 메이크 파일은 C++ 98 용으로 컴파일됩니다. 분명히 많은 언어 이점을 제공하므로 C++ 11을 사용하고 싶습니다. g ++ 4.8은 C++ 11의 경우 rather complete support입니다.

내 질문 : 이것은 어떤 종류의 위험 요소가 있습니까? 어떤 것들을주의해야합니까? 어떤 유형의 것들이 깨질 수 있습니까?

내 google-foo는 검색이 어려워서 이것에 대한 분석을 찾을 수 없었기 때문에 다소 부족합니다. (어쩌면 그들의 진짜로 어떤 위험도 아니기 때문에, 나는 모르겠습니다.)

+2

[관련 질문] (http://stackoverflow.com/q/23047198/1782465). – Angew

+3

C++ 03 모드로 빌드를 시도하고 잠재적 인 오류 및 경고를 수정하여 단계를 수행하십시오. 그런 다음 C++ 11 모드로 다시 빌드하고 오류 및 경고를 다시 수정하십시오. 각 단계는 그다지 크지 않으며 C++ 11은 대부분 C++ 98과 역 호환되는 C++ 03과 거의 역 호환됩니다. 커다란 단점은 향후 제공 될 예정이며 일부 비추천 기능이 제거 될 예정입니다. –

+0

가장 큰 고려 사항은 ['std :: auto_ptr'] (http://en.cppreference.com/w/cpp/memory/auto_ptr)은 더 이상 사용되지 않으므로 [std :: auto_ptr'] unique_ptr'] (http : //en.cppreference.co.kr/w/cpp/memory/unique_ptr). –

답변

2

그냥 -std=c++11을 켜면 다른 어떤 것도 위험이 매우 낮습니다. 갑자기 이전에 할 수 없었던 곳에서 갑자기 움직이는 동작으로 인해 약간의 속도 향상을 볼 수 있지만 코드에 정의되지 않은 동작이없고 gcc가 C++ 11 모드에서보다 적극적으로이를 사용하지 않는 한 어떤 문제도 발생할 수 있습니다. - 나는 그것을 모른다.).

코드를 현대화하는 데있어 clang tidy/clang modernize를보고 싶을 수 있습니다. 그러나 일단 기존의 작업 코드를 실제로 새로운 C++ 11 버전으로 적극적으로 교체하기 시작하면, 실제로주의를 기울여야하고 올바른 코드인지, 새로운 코드인지 완전히 이해해야합니다. 당신이 그것을 대체하기 위해 사용하는 특징.

http://clang.llvm.org/extra/clang-tidy/index.html

특히 'modernize- * 수표를 참조하십시오 http://clang.llvm.org/extra/clang-tidy/checks/list.html

+1

이것이 바로 @Jesper Juhl이하고 싶은 일입니다. 또한 clang으로 컴파일하고 분석을 위해 일부 도구를 사용하려고합니다. – LeviX

1

이 위험의 어떤 종류를 소개 하는가? 어떤 것들을주의해야합니까?

일반적으로 현재 표준 ()은 이전 표준 코드를 완벽하게 컴파일합니다.

(단지 컴파일하지 않는 것 외에) 어떤 종류의 것들이 깨질 수 있습니까?

예를 들어 다음과 같이 사용 중지 된 항목에 대한 경고가 표시 될 수 있습니다. std::auto_ptr하지만 올바르게 작동합니다.


이전 코드를 리팩터링 할 가치가 있는지 판단해야합니다.

새로운 언어 기능을 사용하는 인터페이스가 개선 될 수 있다면 리팩토링을 고려해야합니다.

+0

Nitpick : 현재 표준은 C++ 14이며 C++ 11은 아닙니다. –

+0

@JesperJuhl [네, 맞습니다.] (https://isocpp.org/std/the-standard). –

관련 문제