В чем разница между default_value и implicit_value в boost:: program_options?
Это вопрос. Почему я должен использовать implicit_value по умолчанию_value и наоборот?
Спасибо!
Ответ 1
default_value() - это значение, которое будет помещено в variables_map, если пользователь не указал другое значение:
./a.out # implies width=75 if that the default_value for width
./a.out --width=80 # default_value not used
implicit_value() - это значение, которое будет использоваться, если пользователь указывает параметр, но без смежного значения.
./a.out --width # implies width=75 if that 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
Ответ 2
Если я правильно помню, разница возникает с опцией, которая позволяет что-то вроде -X=Y (где "Y" может быть, например, числом). Значение по умолчанию - это то, что вы получаете, если пользователь не ввел -X в командной строке. Неявное значение - это то, что вы получаете, если пользователь вводит -X в командной строке без указания значения.
Рассмотрим, например, gcc, который поддерживает уровни оптимизации от 0 до 3 (IIRC). Если вы вообще не укажете -O, по умолчанию он равен -O0 (т.е. Оптимизация отключена). Если вы укажете -O (без номера), вы получите неявное значение, эквивалентное -O1. Вы также можете явно указать -O1, или вы можете указать -O2 или -O3.