2016-02-19 108 views
0

我有兩個不同的設備提升的相同的版本,但該行爲的lexical_cast與負數的行爲不同在不同的機器

lexical_cast<uint>("-1") 

的文檔是不同的國家,它應該給我INT_MAX(2的補側翻)但在一臺機器上,我得到一個異常拋出,而另一臺機器上我得到INT_MAX。

+1

'INT_MAX'?文件在哪裏說的? – AnT

+1

@Ant,[常見問題解答](http://www.boost.org/doc/libs/1_60_0/doc/html/boost_lexical_cast/frequently_asked_questions.html)講述了在投射* string *'「-1」時會發生什麼, 'to'uint'(它最終依賴於C的scanf規則),但在關於鑄造'-1'的文檔中我什麼都沒看到。事實上,我從沒有看到從任何非字符串類型轉換爲另一個非字符串類型,除非它暗示'numeric_cast'「可以提供更合理的行爲。」所以,餛飩請提供一個引用,也許可以告訴你爲什麼不使用'numeric_cast'。 –

+0

忘了報價。它用於字符串轉換。對困惑感到抱歉。 – wonton

回答

1

顯然,如果你看一下升壓轉換器的代碼lexical_cast輸入被加載並運行在使用這樣的interpreter << arg; interpreter >> result代碼和>>操作

this->setg(start, start, finish);    
std::basic_istream<CharT> stream(static_cast<Base*>(this)); 
stream.unsetf(std::ios::skipws); 

它使用std::basic_istream等不同版本libstdC++會導致lexical_cast表現在不同的機器上不同。

+0

。·。文檔錯誤,至少。 –

+1

我不知道我跟着你。不同版本的'basic_istream'如何影響這裏顯示的代碼? –

+0

我不確定代碼是否相關。唯一能夠找到類似代碼的地方(在Boost 1.59中)是在'lexical_cast_old.hpp'中,它有註釋:'//按值調用fallback版本(不推薦)' – Ferruccio

相關問題