빈 타조 스트림에 대한 TETP의 표준 동작
-
22-08-2019 - |
문제
전화의 표준 행동에 대한 질문이 있습니다. 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을 제공해야합니다.
제휴하지 않습니다 StackOverflow