所有 const 标记方法的隐式 [[nodiscard]]?

问题描述 投票:0回答:0

我想更新我的库的 API,以便编译器在用户调用

const
标记的方法时发出警告,然后忽略该方法的返回值。原因是因为
const
方法没有副作用,调用它的唯一原因就是检查它的返回值......所以如果程序员不这样做,那几乎肯定是一个错误,并且应该引起程序员的注意。 (在极少数情况下,程序员确实有意这样做,他应该在调用中添加一个
(void)
标记,以明确他不寻常的决定)

C++17 的

[[nodiscard]]
属性提供了这种行为,但是将
[[nodiscard]]
添加到成千上万个带有
const
标记的方法中的每一个是乏味的,而且(更糟糕的是)会使头文件变得杂乱无章;如果有一些编译器标志我可以用来告诉我的编译器任何
const
标记的方法也应该被默认视为
[[nodiscard]]
,那就更好了。

这样的编译器标志是否存在? FWIW 我主要使用 clang++,但有时也使用 g++ 和 MSVC。

FWIW 我试过

-Wunused-result
,但这似乎对编译器的行为没有任何影响。

下面的用法示例:

class MyContainer
{
public:
   MyContainer() : _count(0) {/* empty */}

   // This works but it would be better if `const` implied `[[nodiscard]]`
   [[nodiscard]] bool IsEmpty() const {return (_count == 0);}

private:
   int _count;
};

int main(int argc, char ** argv)
{
   MyContainer c;
   c.IsEmpty();  // should generate a warning, because the user didnt' use the result, so calling the const-method makes no sense
   return 0;
}
c++ c++17 constants clang++ nodiscard
© www.soinside.com 2019 - 2024. All rights reserved.