您的位置:首页 > 编程语言 > C语言/C++

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;
}

上述代码最终运行结果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: