[问题]
我在看boost源代码的时候看到如下的代码,
template<class charT> basic_command_line_parser<charT>:: basic_command_line_parser(int argc, const charT* const argv[]) : detail::cmdline( // Explicit template arguments are required by gcc 3.3.1 // (at least mingw version), and do no harm on other compilers. to_internal(detail::make_vector<charT, const charT* const*>(argv+1, argv+argc+!argc))), m_desc() {}
不明白里面的
argv+argc+!argc
是干什么用的, 请高手指教,谢谢
附上to_internal函数:
template<class T> std::vector<std::string> to_internal(const std::vector<T>& s) { std::vector<std::string> result; for (unsigned i = 0; i < s.size(); ++i) result.push_back(to_internal(s[i])); return result; }
[答案]
一般而言,argc表示参数个数,argv表示参数数组,argv[0]表示程序自己的名称
如 运行程序名为z1.exe 带参数 为字符串,将字符串转为大写输出
命令行输入 z1 AbcD9
这里argc =2, argv[0]="z1" ,argv[1]="AbcD9"
!argc表示逻辑关系
如果argc=0 !argc=1
argc=0 !argc=1
argv+argc+!argc表示命令行的最后,如argc=2,则将指针移到argc[2];如果argc=0,指针移到argv[1]。
相当于char str[5];中的str[5]