What's the point of g++ -Wreorder을 보면, -Wreorder
은 무엇에 유용할까요?왜 g ++가 더 스마트하지 않습니까?
struct Harmless {
C() : b(1), a(2) {}
int a;
int b;
};
또는 고장 :
struct Broken {
C() : b(1), a(b + 1) {}
int a;
int b;
};
내 질문은 다음이다 :하지만 컴파일러는 이러한 순서 변경이 무해 여부를 감지 할 수있을 것이라고 무리하지 않는 것 왜 감지 GCC하지 않습니다 이니셜 라이저의 순서에 관한이 담요 경고 대신에 초기화되지 않은 멤버의 실제 사용을 경고합니다.
내가 이해하는 한, -Wuninitialized
은 자동 변수에만 적용되며 실제로 위의 오류는 감지하지 못합니다.
편집 :
내가 원하는 동작을 공식화에서의 자상 : 감안할 때 초기화 목록 : a1(expr1), a2(expr2), a3(expr3) ... an(exprn)
, 내가 경고 경우 (단 경우) 초기화의 실행을 원하는 순서대로 그들이 초기화되지 않은 값을 참조합니다. 나는. -Wuninitialized
은 초기화되지 않은 자동 변수 사용에 대해 경고합니다.
몇 가지 추가 배경 : 나는 주로 Windows 기반 회사에서 근무하지만 기본적으로 모두가 Visual Studio를 사용합니다. VS에는이 경고가 없으므로 아무도 정확한 주문이없는 것에 대해 걱정하지 않으므로 (수동 검사를 제외하고 주문을 망쳤을 때 알 수있는 방법이 없습니다) 따라서 누군가가 무언가를 깨뜨릴 때마다 끊임없이 고쳐야한다는 끝없는 경고를 남깁니다. 나는 정말로 문제가있는 경우에 대해서만 알리고 양성의 경우는 무시하고 싶습니다. 그래서 내 질문에 어쩌면 더 나은 문구가 : 기술적 으로이 같은 경고/오류 구현할 수 있습니까? 내 직감은 그렇다고 말하지만, 아직 구현되지 않았다는 사실 때문에 의심 스럽습니다.
버그라고 생각되면 버그 리포트를 제출하십시오. 어쨌든, 여기 제가 얻은 것이 있습니다. (http://coliru.stacked-crooked.com/a/69eeca3016360f9b). –
최소한 이니셜 라이저 목록': a1 (expr1), a2 (expr2), a3 (expr3) ... an (exprn) '이 경고를받을 자격이 있는지를 공식적인 방법으로 알려주십시오. – MSalters
초기화 목록에있는 멤버가 클래스에 정의 된 순서와 다른 순서로 프로그램을 디버깅 할 때 혼동을 줄 수 있습니다. 회원이 독립적 인 경우에도. – lego