问几个基础问题

Eastunfail 2005-01-28 05:07:33
翻了好多书都没翻到答案
1.throw 抛出一个栈上的对象,catch拦截到的时候会不会复制一个新的对象啊?
2.实例化一个新对象并抛出,这个对象应该由我来销毁还是编译器做了手脚自己销毁啊?
3.我一个函数需要使用变长参数(...),我如何在函数里面将这个变长参数传给sprintf呢?如下面的Pascal代码:

procedure Assert(Condition:Boolean;Const Fmt:String;const Args:Array of Const);
begin
if not Conditon then
raise Exception.Create(Format(Fmt,Args));
end;
...全文
175 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
stevens2009 2005-01-28
  • 打赏
  • 举报
回复
M
Eastunfail 2005-01-28
  • 打赏
  • 举报
回复
寒~~~~~~自己写啊~~~~~刚才写了点代码做测试了的,1.会复制 2.要手动释放。

结贴了
CMyMfc 2005-01-28
  • 打赏
  • 举报
回复
piaozi2003提醒的对, 呵呵
piaozi2003 2005-01-28
  • 打赏
  • 举报
回复
没有相应函数的那就自己写喽!尽量保证传递的参数都是系统字长的变量(int,指针啦等等!)
CMyMfc 2005-01-28
  • 打赏
  • 举报
回复
发错了
sprintf改为vsprintf
相应printf为vprintf
Eastunfail 2005-01-28
  • 打赏
  • 举报
回复
我只是举个例子。如果对于其他的有变长参数而不是sprintf,那就不一定有个单独的可以传入va_list的参数了
Eastunfail 2005-01-28
  • 打赏
  • 举报
回复
试了一下CMyMfc(星际人生:=E.F=FlyForEver)的方法,输出好像不对头
piaozi2003 2005-01-28
  • 打赏
  • 举报
回复
To: CMyMfc(星际人生:=E.F=FlyForEver)

int vsprintf(char *buffer, const char *format, va_list argptr );
你是否应该选择调用vsprintf,因为你传入的是va_list类型,而不是可变参数列表!
coolstarhty 2005-01-28
  • 打赏
  • 举报
回复
1、是复制,因为错误可能被多次捕捉;
2、既然是你自己实例化,就应该自己销毁吧;
3、不知道
CMyMfc 2005-01-28
  • 打赏
  • 举报
回复
3

va_list ap;
va_start(ap, format);
len = sprintf(buf, format, ap);
va_end(ap);
eric8231 2005-01-28
  • 打赏
  • 举报
回复
1. 复制吧,记得C++标准上是这么规定的,而且以前我在几个不同的编译器上试验,结果也是复制

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧