오늘 코드를 작성하고 이상한 컴파일 오류가 발생했습니다.이 오류는 선언 된 순서와 다른 순서로 멤버 변수를 초기화하여 발생하는 것으로 보입니다.멤버 변수가 선언 된 순서대로 초기화해야하는 이유는 무엇입니까?
예 : -Werror -Wall
와 그 다음 내가 그것을 컴파일하는 경우
class Test {
int a;
int b;
public:
Test() : b(1), a(2) {
}
};
int main() {
Test test;
return 0;
}
:
$ g++ -Werror -Wall test.cpp
test.cpp: In constructor ‘Test::Test()’:
test.cpp:3:9: error: ‘Test::b’ will be initialized after [-Werror=reorder]
test.cpp:2:9: error: ‘int Test::a’ [-Werror=reorder]
test.cpp:6:5: error: when initialized here [-Werror=reorder]
cc1plus: all warnings being treated as errors
내가 -Wall
명시 적으로 이상 - 더 - 상단 경고와 함께 갈 GCC를 요구하고 실현,하지만 난 거기에 가정 그들 모두를위한 이유. 그렇다면 멤버 변수를 초기화하는 순서가 어떻게 중요할까요?
-Werror는 메시지에서 알 수 있듯이 모든 경고를 오류로 처리하도록 컴파일러에 지시합니다. 작성된 코드는 유효하며 그 의미는 잘 정의되어 있습니다 (그런 식으로 쓰지 않는 합리적인 인수가 있지만).하지만 -Werror를 사용하면 컴파일러가 올바른 코드를 컴파일하기를 거부하기 때문에 표준을 따르지 않습니다. –