아래 코드에서 기본 클래스를 만들 때 초기화되지 않은 클래스 멤버에 값을 할당합니다. 이로 인해 런타임 오류가 발생하지 않은 이유는 무엇입니까?
class Foo {
public:
Foo(std::string) {}
};
class Bar : public Foo {
public:
Bar() : Foo(s = f()) {} // assigning to uninitialized class member
void print() {
std::cout << s << std::endl;
}
std::string f() {
return "Some string";
}
private:
std::string s;
};
int main()
{
Bar b;
b.print();
return 0;
}
그러나 Bar 클래스에 다른 멤버를 추가하면 Foo 클래스 생성시 오류가 발생합니다.
Class Bar {
// same as above
private:
std::string s;
int a; // adding another member
};
왜 이런 일이 발생합니까?
"런타임 에러"? 초기화되지 않은 구성원에 할당 할 때 "런타임 오류"가 없습니다. C ++에서 "초기화되지 않음"상태는 런타임에 감지되지 않으므로 "런타임 오류"와 같은 결정적인 방식으로 처리 할 수 없습니다.
이와 같은 작업을 수행하면 코드가 정의되지 않은 동작을 나타냅니다 . 이 정의되지 않은 동작이 그 자체로 드러날 거리는 예측할 수 없습니다. 클래스에서 다른 멤버를 선언하는 것과 같이 완전히 관련이없는 요소에 쉽게 민감 할 수 있습니다. 그게 전부입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다