zoukankan      html  css  js  c++  java
  • 可变參数

    C++中传递參数时,有时候不确定參数的数量,这时候能够使用可变參数。例如以下:

    1、std::initializer_list

    C++11标准,使用方法类似vector,參数类型需同样。使用方法例如以下:

    #include <initializer_list>

    void  method(std::initializer_list<int> il)

    {

            for(auto i: il)

            {

                    printf("%d", i) ;

            }

    }


    int _tmain(int argc, _TCHAR* argv[])

    {

            method({1, 3, 4, 6, 7}) ;

            return 0 ;

    }


    2、省略符形參

    省略符形參是为了便于C++程序訪问某些特殊的C代码而设置的,这些代码使用了名为varargs的C标准库功能。通常,省略符形參不应用于其它目的。

    备:省略符形參应该只用于C和C++通用的类型。特别注意的是,大多数类类型的对象在传递给省略符形參时都无法正确拷贝。

    省略符形參必须在參数列表的最后,而前面必须至少有一个形參。 使用方法例如以下:

    #include <stdarg.h>

    void method(int i, ...)

    {

            int v ;

            va_list params ;//声明可变參数列表

            va_start(params, i) ; //依据可变參数前的參数获得可变參数的起始地址

            do{

                    v = va_arg(params, int) ; //从可变參数列表中获得參数的值,类型为int

                    printf("%d", v) ;

            }while(v != 0) //须要自己设置可变參数列表的结束标志,即当读到某个值时表示可变參数列表到达末尾,假设没有设置结束标准会继续读取内存数据,会出现意想不到的问题。

            va_end(params) ; //结束

    }


    //使用省略符形參 格式化字符串

    void format(const char* format, ...)

    {

            char buf[1024] ;

            va_list params ;

            va_start(params, format) ;

            vsnprintf_s(buf, 1024, 1024, format, params) ;

            va_end(params) ;

            printf("%s", buf) ;

    }


    3、可变參数宏

    #define FORMAT(format, ...) format(format, ##__VA_ARGS__) //使用 ##__VA_ARGS__传递可变參数


    int _tmain(int argc, _TCHAR* argv[])

    {

            method(1, 3, 4, 6, 7, 0) ;

            format("int: %d, string: %s, float: %f", 10, "test", 1.23) ;
            FORMAT("int: %d, string: %s, float: %f", 10, "test", 1.23) ;

            return 0 ;

    }

  • 相关阅读:
    实现 (5).add(3).minus(2) 功能
    vue兄弟组件传值的三种方法
    Web渗透测试思路整理
    PHP代码审计基础
    简单易用,用Powershell劫持Windows系统快捷键
    javascript脚本混淆
    秒杀系统架构优化思路
    什么是OOP
    一分钟了解负载均衡的一切
    MVC
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4007920.html
Copyright © 2011-2022 走看看