boost :: program_options中的default_value和implicit_value有什么区别?

sha*_*haz 27 boost boost-program-options

这就是问题所在.为什么我会使用implicit_value而不是default_value,反之亦然?

谢谢!

wil*_*ell 39

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
Run Code Online (Sandbox Code Playgroud)

implicit_value() 是用户指定选项但没有相邻值时将使用的值.

./a.out --width     # implies width=75 if that's the implicit_value for width
./a.out --width=80  # implicit value not used
Run Code Online (Sandbox Code Playgroud)

如果您implicit_value在命令行选项的短选项中使用then,则用户必须在选项后立即指定值:

./a.out -w80   # implicit_value not used
./a.out -w 80  # wrong: 80 parsed as extra arg if implicit_value is defined
Run Code Online (Sandbox Code Playgroud)


Jer*_*fin 0

如果我没记错的话,差异是由允许类似的选项-X=Y(其中“Y”可能是数字)引起的。-X默认值是用户未在命令行中输入 a 时获得的值。-X隐式值是用户在命令行中输入而不指定值时获得的值。

例如,考虑 gcc,它支持从 0 到 3 的优化级别 (IIRC)。-O如果您根本不指定,则默认为-O0(即关闭优化)。如果您指定-O(没有数字),您将获得隐式值,相当于-O1. 您还可以-O1显式指定,也可以指定-O2-O3