首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在返回引用的函数上使用__declspec(nothrow)

在返回引用的函数上使用__declspec(nothrow)
EN

Stack Overflow用户
提问于 2012-02-07 06:41:26
回答 1查看 1K关注 0票数 2

我想在我的一些返回对象引用的成员函数上应用__declspec(nothrow)。例如,我想将其添加到此函数中(在MyClass.h中):

代码语言:javascript
复制
CMyClass& operator= ( IN UInt32 nValue )
{
    return ( SetValue ( nValue ) );
};

我需要在函数的返回类型后面添加它的VC++ documentation says,如下所示:

return-type __declspec(nothrow) [call-convention] function-name ([argument-list])

如果我遵循这一点,我的大多数函数都可以很好地与__declspec(nothrow)配合使用。但是,当我对上面的成员函数(或任何其他返回CMyClass&的函数)执行此操作时,我得到了编译错误:

error C2059: syntax error : '__declspec(nothrow)'

我可以把它放在返回类型前面,然后它就会编译,但是文档还说,如果__declspec()放在错误的位置,编译器可能会忽略它,而不会发出警告或出现错误。

使用__declspec(nothrow)的正确方式是什么

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-10 14:24:45

我相信(但不是百分之百确定)正确的语法是:

代码语言:javascript
复制
CMyClass __declspec(nothrow) & operator= ( IN UInt32 nValue )

似乎编译器对函数声明遵循的规则与对简单声明的规则相同,& (或*)遵循declspec。这与一些MSDN documentation相匹配。

__declspec关键字应该放在简单声明的开头。编译器会在没有警告的情况下忽略放置在*或&之后以及声明中变量标识符之前的任何__declspec关键字。

然而,正如其他人所指出的那样,这有点浪费时间。throw()没有同样奇怪的解析问题,the documentation特别声明它是等效的。

给定以下预处理器指令,下面的三个函数声明是等效的:

#定义WINAPI (__declspec) __stdcall

void WINAPI f1();

void __declspec( __stdcall ) f2();

__stdcall f3()抛出();

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9168424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档