gpt4 book ai didi

c++ - 在特殊情况下是否可以忽略 [[nodiscard]]?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:24:57 24 4
gpt4 key购买 nike

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
}

这个程序生成:

warning: ignoring return value of function declared with 'nodiscard' attribute [-Wunused-result]

到目前为止,还不错。现在假设我有一个特殊的函数,我仍然想为它返回 Result,但如果省略检查,我不希望生成此警告:

Result someNonCriticalFunction();

int main() {
someNonCriticalFunction(); // I don't want to generate a warning here
}

这是因为,someNonCriticalFunction() 做了一些非关键的事情(例如,printf - 我打赌没有人检查 printf 一直返回值);大多数情况下,我不在乎它是否失败。但我仍然希望它返回 Result,因为在极少数情况下,我确实需要它的 Result

是否有可能以某种方式做到这一点?


我不喜欢的可能解决方案:

  • 我不想将它称为(void)someNonCriticalFunction(),因为这个函数被调用了很多次,很尴尬
  • someNonCriticalFunction() 周围创建一个包装器,它调用 (void)someNonCriticalFunction():我不想因为这个而使用不同名称的函数
  • 从 Result 中删除 [[nodiscard]],并将其添加到返回 Result 的每个函数中

最佳答案

为什么不利用 std::ignore来自 <tuple> header ——这将使丢弃显式:

[[nodiscard]] int MyFunction() { return 42; }

int main()
{
std::ignore = MyFunction();
return 0;
}

关于c++ - 在特殊情况下是否可以忽略 [[nodiscard]]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47104328/

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