[问题]
我在看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]
分类:
C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架