문제

전화의 표준 행동에 대한 질문이 있습니다. tellp 빈 위에 ostringstream. 호출하는 기능 foo가 있습니다 tellp 첫 번째:

void foo(std::ostream& os)
{
    std::ostream::pos_type pos = os.tellp();
    // do some stuff.
}

int main()
{
    std::ostringstream os;
    foo(os);
}

Visual Studio 2005에서 새로 만들어지고 비어있는이 기능을 호출 ostringstream 결과 pos 유효하지 않은 변수 pos_type, Visual Studio 2005에서 설정되었습니다 pos_type(_BADOFF).

ofstream 동일한 행동이 없습니다 tellp 보고 pos_type(0), 유효합니다 pos_type.

이 표준 준수 행동입니까? 이 동작은 다른 컴파일러와 일치합니까?

도움이 되었습니까?

해결책

27.6.2.4:

pos_type tellp();

반환 : 실패 ()! = false 인 경우 pos_type (-1)를 반환하여 실패를 나타냅니다. 그렇지 않으면 rdbuf ()-> pubseekoff (0, 똥개, 밖으로).

그리고 Pubseekoff 실패로 -1을 반환합니다. 그러나 왜 이것이 당신에게 발생하는지 잘 모르겠습니다. 타조 스트림, 어쩌면 너무 피곤했을 수도 있습니다. 한정되지 않은 또는 구현 의존적. 내 상식을 사용하여 나는 그렇게 말할 것입니다 타조 스트림 기본 구성 Ostream -1의 경우 0, 새로 열린 파일 0이있는 타조의 경우 0을 제공해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top