这就是问题所在。为什么我会使用implicit_value而不是default_value,反之亦然?
谢谢!
答案 0 :(得分:38)
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
答案 1 :(得分:0)
如果我没记错的话,差异就出现在一个允许-X=Y
之类的选项上(例如,“Y”可能是一个数字)。如果用户未在命令行中输入-X
,则会获得默认值。如果用户在命令行上输入-X
而未指定值,则会获得隐式值。
例如,考虑gcc,它支持从0到3(IIRC)的优化级别。如果您根本没有指定-O
,则默认为-O0
(即,关闭优化)。如果指定-O
(没有数字),则会得到隐含值,相当于-O1
。您也可以明确指定-O1
,也可以指定-O2
或-O3
。
答案 2 :(得分:0)
这里是example
desc.add_options()
("help", "produce help message")
("optimization", po::value<int>(&opt)->default_value(10),
"optimization level")
("verbose,v", po::value<int>()->implicit_value(1),
"enable verbosity (optionally specify level)")
("listen,l", po::value<int>(&portnum)->implicit_value(1001)
->default_value(0,"no"),
"listen on a port.")
("include-path,I", po::value< vector<string> >(),
"include path")
("input-file", po::value< vector<string> >(), "input file")
;
如果您既不输入优化也不收听,则
./ myApp.exe
输出:
Optimization level is 10
Listen port is 0
如果您输入的选项--optimization
不带参数,则会丢失参数。而且,如果您输入的--listen
不带参数,它将给出一个隐式值1001。