eno*_*mem 3 c++ variadic-functions
使用va_list类型作为类成员是否安全?
以下示例适用于Solaris.它不需要可以跨不同的操作系统移植.但是它可以移植到未来的Solaris版本吗?不同的HW?不同的编译器?还是编译选项?
class MyFormatString
{
public:
MyFormatString(const char* formatString, va_list varg);
~MyFormatString() { va_end(mVarg); }
// ...
// provide some util functions to operate on the format string
// ...
private:
string mFormatString;
va_list mVarg;
};
MyFormatString::MyFormatString(const char* fmt, va_list varg)
{
if (fmt)
mFormatString=fmt;
va_copy(mVarg, varg);
}
Run Code Online (Sandbox Code Playgroud)
不,您只能使用va_list它所引用的对象在范围内(在函数本身中,或作为参数传递给其他函数),直到您调用的点va_end.您必须va_end在从函数返回之前调用,在此之后,它va_list不再可用.
从C99,7.15.1.3开始:"如果va_end在返回之前未调用宏,则行为未定义."
在C++ 11中,考虑可变参数模板或std::tuple作为旧式可变参数函数的类型安全替代方法.
| 归档时间: |
|
| 查看次数: |
1442 次 |
| 最近记录: |