C++难点解析之可变参数
2018-07-10 07:48
337 查看
C++难点解析之可变参数
在C++ 中一般函数的参数个数都是固定的,但是也有一种特殊的函数,他们的参数个数是可变的。针对这种情况C++中提供了initializer_list和省略号两种方法,其中initializer_list要求可变参数的类型必须都一致,而省略号方式则不具备这种限制,要更加灵活。下面主要从两种情况展示省略号方式的用法。#include <cstdarg> #include <string> #include <iostream> using namespace std; const int gBufSize{128}; int sumInt(const int numCounts, ...) { va_list ap; va_start(ap, numCounts); int sum{}; for (int i{0}; i < numCounts; ++i){ sum += static_cast<int>(va_arg(ap, int)); } va_end(ap); return sum; } /** * 需要注意的有两点:1、可变参数可以使用va_list来进程传递。 * 2、使用initializer_list必须保证参数都是相同的类型。 * */ string formatMsg(const char* fmt, ...) { char buf[gBufSize]; va_list ap; va_start(ap, fmt); int writtenBytes{}; writtenBytes = vsprintf_s(buf, gBufSize, fmt, ap); if (!writtenBytes){ wcout << L"未能输出字符串" << endl; return string{}; } va_end(ap); return string{buf}; } int main() { setlocale(LC_ALL, "Chinese-Simplified"); wcout << L"可变参数测试..." << endl; cout << formatMsg("%s %s", "Hello", "World") << endl; cout << sumInt(3, 4, 5, 6) << endl; wcout << L"可变参数测试完成..." << endl; system("pause"); return 0; }
上述代码最终运行结果为:
相关文章推荐
- C/C++宏定义的可变参数详细解析
- C/C++中可变参数的用法详细解析
- C/C++宏定义的可变参数详细解析
- C/C++宏定义的可变参数详细解析
- C/C++宏定义的可变参数详细解析(转)
- C/C++中可变参数函数的实现
- python-函数中的参数类型和可变参数解析
- C/C++宏定义的可变参数(VC6不支持可变参数宏)
- C,C++中使用可变参数
- 可变参数宏__VA_ARGS__解析
- C语言中可变参数列表解析
- [置顶] C++ 通用可变参数高级函数模板
- 可变参数列表解析
- C/C++可变参数,“## __VA_ARGS__”宏的介绍和使用
- c++可变长参数的函数
- 解析c++中参数对象与局部对象的析构顺序的详解
- c++中的可变参数
- C/C++语言中可变参数的用法
- C语言中的可变参数-printf的实现原理 在C/C++中,对函数参数的扫描是从后向前的。C/C++的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出
- C/C++中可变参数的原理