我正在創建自己的streambuf
子類,並使用C++ 03規範(ISO/IEC 14882:2003)作爲參考。古怪C++ 03 seekoff()和seekpos()規範
在第27.5.2.4.2 [lib.streambuf.virt.buffer],規格爲既basic_streambuf::seekoff()
和basic_streambuf::seekpos()
說:
默認行爲:返回pos_type(off_type(-1)) 。現在
,我以爲off_type
被認爲是一個有符號整數類型和pos_type
應該是一個無符號整型,所以在我看來,這種表達必須只相當於pos_type(-1)
。
但是假設我錯了,這些類型可能是其他簽名和未簽名的組合......然後我仍然無法弄清楚這個雙重演員的任何可能用法。
例如,如果兩者都有符號,則該表達式再次等於pos_type(-1)
。
如果pos_type
簽署和off_type
是無符號 - 這是沒有意義的,但忍耐一下 - 然後在最好的這雙投會推一些巨大的價值爲pos_type
在最壞的情況將通過分配調用實現定義的行爲對已簽署的pos_type
整數的值太大。
有沒有人知道在這裏指定pos_type(off_type(-1))
而不是僅僅是pos_type(-1)
的標準的基本原理?如果不是,你甚至可以想象一個合理的理由嗎?
以下段落在[fpos.operations]一節中:返回類型traits :: pos_type的值的流操作返回P(O(-1))作爲無效值到 表示發生錯誤。如果此值用作任何istream,ostream或streambuf成員的參數,該成員 接受類型traits :: pos_type的值,則該函數的行爲未定義。 ---也許你可以理解本節的其餘部分,這是我理解的唯一部分。 – Patrick
@帕特里克:是的,那部分確實是關鍵。 (請參閱接受的答案和我的評論。)謝謝! – Nemo