gpt4 book ai didi

c++ - 在返回引用的函数上使用 __declspec(nothrow)

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:49 25 4
gpt4 key购买 nike

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

CMyClass& operator= ( IN UInt32 nValue )
{
return ( SetValue ( nValue ) );
};

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

return-type __declspec(nothrow) [call-convention] 函数名 ([argument-list])

如果我遵循这个,我的大部分功能都可以在 __declspec(nothrow) 下正常工作。但是,当我为上述成员函数(或任何其他返回 CMyClass& 的成员函数)执行此操作时,出现编译错误:

错误 C2059:语法错误:'__declspec(nothrow)'

我可以将它放在返回类型的前面,然后它会编译,但文档还说如果 __declspec() 放在错误的位置,编译器可能会在没有警告或错误的情况下忽略它。

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

最佳答案

我相信(但不是 100% 确定)正确的语法是:

CMyClass __declspec(nothrow) & operator= ( IN UInt32 nValue )

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

The __declspec keywords should be placed at the beginning of a simple declaration. The compiler ignores, without warning, any __declspec keywords placed after * or & and in front of the variable identifier in a declaration.

不过,正如其他人指出的那样,这是在浪费时间。 throw() 没有相同的奇怪解析问题,并且 the documentation特别指出它是等价的。

Given the following preprocessor directive, the three function declarations below are equivalent:

#define WINAPI __declspec(nothrow) __stdcall

void WINAPI f1();
void __declspec(nothrow) __stdcall f2();
void __stdcall f3() throw();

关于c++ - 在返回引用的函数上使用 __declspec(nothrow),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9168424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com