C++17 有一个新属性,[[nodiscard]]
.
假设我有一个Result
结构,它具有以下属性:
struct [[nodiscard]] Result {
};
现在,如果我调用一个返回的函数,Result
如果我不检查返回的,我会收到一个警告Result
:
Result someFunction();
int main() {
someFunction(); // warning here, as I don't check someFunction's return value
}
该程序生成:
警告:忽略使用“nodiscard”属性声明的函数的返回值 [-Wunused-result]
到目前为止,一切都很好。现在假设,我有一个特殊的功能,我仍然想返回Result
,但我不希望生成这个警告,如果检查被省略:
Result someNonCriticalFunction();
int main() {
someNonCriticalFunction(); // I don't want to generate a warning here
}
这是因为,someNonCriticalFunction()
做了一些非关键的事情(例如,像printf
- 我打赌没有人printf
一直检查 ' 的返回值);大多数情况下,我不在乎它是否失败。但我仍然希望它返回Result
,因为在极少数情况下,我确实需要它的Result
.
有可能以某种方式做到这一点吗?
我不喜欢的可能解决方案:
- 我不喜欢叫它 as
(void)someNonCriticalFunction()
,因为这个函数被调用了很多次,很尴尬 - 创建一个包装器
someNonCriticalFunction()
,它调用(void)someNonCriticalFunction()
:我不想仅仅因为这个而有一个不同命名的函数 - 从 Result 中删除
[[nodiscard]]
,并将其添加到每个返回的函数中Result