32

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

谢谢!

4

3 回答 3

41

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在命令行选项的短选项中使用 then ,用户必须在选项之后立即指定值:

./a.out -w80   # implicit_value not used
./a.out -w 80  # wrong: 80 parsed as extra arg if implicit_value is defined
于 2010-05-13T20:25:45.423 回答
1

这是一个例子

    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。

于 2020-01-15T07:10:33.897 回答
0

如果我没记错的话,差异出现在一个允许类似-X=Y(例如,“Y”可能是一个数字)的选项上。默认值是用户没有-X在命令行上输入 a 时得到的值。如果用户-X在命令行上输入而没有指定值,那么您会得到一个隐式值。

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

于 2010-05-13T20:23:07.597 回答