抑制函数 returns 的 "Avoid unnamed object" 警告

Suppress "Avoid unnamed object" warnings for function returns

我有一个日志函数,我有时将 return 的 on 传递给另一个函数,有时单独调用

LogReturnStruct Log(string message) { writeToFile(message); return {message};);

这是因为我有时想记录一些即将尝试的事情,以及它是否成功

void Handle(LogReturnStruct, statusCode)
{
    if(statusCode == valid)
        Log("sucess: "+ LogReturnStruct.message);
    else
        Log("failure: "+ LogReturnStruct.message);
}

所以我可以这样调用

Handle(Log("message"),funcThatMightFail());

并且它会在这个调用之前和之后强制记录,并且至少会在调用之前记录,即使调用引发异常

不过我也希望能够只记录一条消息

Log("message"); // alone call

然而,无论我如何使用[[maybe_unused]],我似乎都无法抑制编译器警告

"Avoid unnamed objects with custom creation and destruction"

有没有办法在不禁用整个警告的情况下指示此 return 值可能未使用(没关系)?

您似乎可以使用 [[gsl::suppress(es.84)]],但它应该在呼叫站点使用 :-/

MACRO 可以提供帮助:

LogReturnStruct LogImpl(string message) { writeToFile(message); return {message}; }

#define Log(s) [[gsl::suppress(es.84)]] LogImpl(s)

更简洁的解决方案是避免警告并创建 2 个函数(您已经拥有它们:))(但需要更改调用站点):

void Handle(LogReturnStruct, statusCode)
{
    if(statusCode == valid)
        writeToFile("sucess: "+ LogReturnStruct.message);
    else
        writeToFile("failure: "+ LogReturnStruct.message);
}

Handle(Log("message"), funcThatMightFail());