2010-05-13 56 views

回答

0

如果我沒記錯的話,區別與允許類似-X=Y一個選項出現(其中「Y」可能是,例如,一個數字)。如果用戶沒有在命令行中輸入-X,則會得到默認值。如果用戶在命令行上輸入-X而沒有指定值,則會得到一個隱含值。

考慮,例如,GCC,它支持優化級別從0到3(這個)。如果您根本沒有指定-O,則默認爲-O0(即優化已關閉)。如果您指定-O(沒有數字),則會得到隱含值,相當於-O1。您也可以明確指定-O1,或者您可以指定-O2-O3

+0

它不一定反映在命令行上指定哪些用戶上。 Boost的program_options對所有解析器都使用'options_descriptor',所以如果例如在配置文件或環境變量中指定該值,則該庫不會回退到'default_value'。 – wilhelmtell 2010-05-13 20:35:04

+0

@WilhelmTell:的確如此。 – 2010-05-13 21:42:10

34

default_value()是將放在variables_map,如果用戶沒有指定其他值值:

./a.out    # implies width=75 if that's the default_value for width 
./a.out --width=80 # default_value not used 

implicit_value()是將要使用的,如果用戶指定選項的值,但沒有相鄰值。

./a.out --width  # implies width=75 if that's the implicit_value for width 
./a.out --width=80 # implicit value not used 

如果在命令行選項的短選項使用implicit_value那麼用戶必須選擇後立即指定的值:

./a.out -w80 # implicit_value not used 
./a.out -w 80 # wrong: 80 parsed as extra arg if implicit_value is defined 
相關問題