試圖學習助推精神和文檔中給出的示例讓我有點困惑。加強精神羅馬數字解析器示例
參照此代碼:
http://www.boost.org/doc/libs/1_46_1/libs/spirit/example/qi/roman.cpp
特別是這一細分市場的語法:
start = eps [_val = 0] >>
(
+lit('M') [_val += 1000]
|| hundreds [_val += _1]
|| tens [_val += _1]
|| ones [_val += _1]
)
爲什麼它是+點燃( 'M'),而不是*亮
有人能向我解釋( 'M')。因爲畢竟不能有零個或多個M與一個或多個M?
使用*點亮('M')和CCLLIX。那麼爲什麼結果返回250並停在LIX?就像你說的那樣,它不應該爲零匹配增加1000到_val並且CCLLIX沒有M.因此不應該返回1250而不是250嗎? – Integer
@Integer:我添加了解釋。 'CCLLIX'不是一個有效的數字。 – Nawaz
好的。對於那個很抱歉。但即使我使用CCLIX都使用*和+結果的正確答案爲259。爲什麼不像你說的那樣導致1259? – Integer