5
더 예시하여 설명 세그멘테이션 오류 원인 프로그램이 0을 인쇄합니다. 실제 코드는 seg fault를 얻는다.는
const 참조에 할당 된 임시 직원의 수명을 연장하는 규칙이 여기에 적용되지만 예상대로 적용되지 않을 것으로 예상됩니다. 그 이유를 아십니까? '
더 예시하여 설명 세그멘테이션 오류 원인 프로그램이 0을 인쇄합니다. 실제 코드는 seg fault를 얻는다.는
const 참조에 할당 된 임시 직원의 수명을 연장하는 규칙이 여기에 적용되지만 예상대로 적용되지 않을 것으로 예상됩니다. 그 이유를 아십니까? '
이 규칙은 클래스 멤버에게는 적용되지 않습니다. 임시의 수명이 될 수 있도록 클래스의 일부로 유지해야한다는 것을 의미하는 것이다 임시 더 오래보다 만들기
A temporary bound to a reference member in a constructor's ctor-initializer
persists until the constructor exits.
:이 C++ 03 표준의 12.2.5에 명시되어 유지. 클래스가 정의 될 때 클래스의 크기를 알아야하기 때문에 생성자가 별도의 컴파일 단위에 있으면이 작업은 불가능합니다.
// header file
struct A {
A();
B &b;
};
// file1.cpp
void f()
{
A a; // Reserve the size of a single reference on the stack.
}
// file2.cpp
A::A()
: b(B()) // b is referencing a temporary, but where do we keep it?
// can't keep the temporary on the stack because the
// constructor will return and pop everything off the stack.
// Can't keep it in the class because we've already said the
// class just contains a single reference.
{
}
스폿이 켜져있는 이유는 무엇입니까? 오늘은 천천히. : ( –
간결하고 포괄적입니다. – davka