• 操作argc, argv的经典写法


    [问题]

    我在看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]

  • 相关阅读:
    Variant 数组
    socket c/s分佈式編程
    多線程幾個方法說明
    hash表的使用
    MIS系统权限控制的一个简便方法
    git 使用总结
    让 VAGRANT 启动并运行起来
    深入理解 Laravel 中 config 配置加载原理
    Vagrant入门
    php开发APP接口(总结一)
  • 原文地址:https://www.cnblogs.com/time-is-life/p/9133324.html
Copyright © 2020-2023  润新知