千家信息网

如何使用c中变长参数

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,本篇内容主要讲解"如何使用c中变长参数",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何使用c中变长参数"吧!1.使用模板中的变长参数函数声明#inclu
千家信息网最后更新 2025年01月17日如何使用c中变长参数

本篇内容主要讲解"如何使用c中变长参数",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何使用c中变长参数"吧!

1.使用模板中的变长参数函数声明

#include using namespace std;/*变长参数函数模板声明*/template void print(T... val);/*边界条件*/void print(void){cout<<"here end"<void print(T1 start, T2... var){cout<<"sizeof ... now is: "<

其中的声明其实是没什么用的,只是告诉使用者可以按照这样的格式使用,如果不做这个声明,只保留"边界条件"和"递归的特例化定义",这样虽然可行,但是未免会造成困惑

执行结果如下:

实际上,这个"变长"付出的代价还是很大的,要递归的实例出n个函数,最终再调用边界条件的函数。过程如下

2.使用va_list()函数实现变长参数列表

以一个矩阵自动识别维度的程序为例

arrayMat.h

#include#include#includeusing namespace std;typedef int dtype;class mat{public:        mat();        ~mat();        void set_dim(int dim);        void mat::set_mat_shape(int i,...);        int  get_dim();        int* get_mat_shape();        void print_shape();        dtype* make_mat();private:        int dim;        int *shape;        dtype *enterMat;};

arrayMat.cpp

#include"arrayMat.h"mat::mat(){}mat::~mat(){}int mat::get_dim() {        return this->dim;}int * mat::get_mat_shape() {        return this->shape;}void mat::print_shape(){        for (int a = 0; a < this->dim; a++) {                std::cout << shape[a] << " " ;        }}void mat::set_dim(int i) {        this->dim = i;}void mat::set_mat_shape(int i, ...) {        va_list _var_list;        va_start(_var_list, i);        int count = 0;        int *temp=new int[100];        while (i != -1) {                //cout << i <<" ";                temp[count] = i;                count++;                i = va_arg(_var_list, int);        }        va_end(_var_list);        this->set_dim(count);        this->shape = temp;        //std::cout << std::endl;        //this->shape = new int [count];        //for (int j = 0; j < count; j++)                //shape[j] = temp[j];}//Mat2D A[i][j] = B[i + j * rows]

main.cpp

#include"arrayMat.h"int main() {        mat m1,m2;        m1.set_mat_shape(1,3,128,128,-1);        int *shape = m1.get_mat_shape();        int dim = m1.get_dim();        cout << "dim: " << dim<

运行结果:

到此,相信大家对"如何使用c中变长参数"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

参数 函数 条件 边界 递归 内容 实际 模板 特例 结果 学习 可行 实用 很大 更深 困惑 没什么 代价 使用者 兴趣 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 微信小程序java 数据库 福田区光纤网络技术开发展示 网络技术综合实习 青岛迅杰软件开发有限公司 政府网络安全保卫部职责 中国知网数据库默认为文献对吗 更改服务器管理地址 自建服务器网络安全 护苗网络安全课实施方案 数据库课程设计团队心得体会 网易邮箱服务器密码已修改 东信网络技术有限公司国企 access数据库可参考的文献 自学软件开发需要怎么做 惠科网络技术有限公司招聘 数据库查询两张表共有的数据 ideahub会议服务器地址 西门子服务器F31806故障 上海俐旭软件开发中心 网络技术专业开设那些课程 方滨兴公安网络安全 德勤软件开发待遇咋样 app上线需要买哪个区的服务器 服务器常见的安全问题 云服务器的防护软件 数据库相关参考文献 计算机网络技术薪资 宝塔修改888数据库 网络安全法实施的顺序是 居民出行方式调查数据库
0