可以使用 std::ignore 来丢弃函数的返回值以避免任何相关的编译器警告吗?

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

我知道你可以使用

static_cast<void>
,但它对我来说似乎太冗长了,没有反映最初的意图,我想丢弃返回值,而不是将其转换为任何东西。最近我偶然发现了一个
std::ignore
,它可以接受任何类型的值,名称清晰易读,对我来说似乎很合适。

再次,我知道最初的意图是与

std::tie
一起使用它来丢弃任何不需要的值,但我猜
static_cast
的初衷是出于比丢弃值更好的原因来实际转换值,因此编译器不会抱怨。那么,可以使用
std::ignore
来实现我在问题中描述的目的吗?

例如:

std::ignore = std::transform(...);

另请记住这是 C++14

c++ gcc c++14
1个回答
1
投票

是的,没关系。事实上,有些人认为这是更好的风格。

切勿强制转换为

(void)
来忽略
[[nodiscard]]
返回值。如果您故意想要丢弃这样的结果,请首先认真考虑这是否真的是一个好主意(函数或返回类型的作者首先使用
[[nodiscard]]
通常是有充分理由的)。如果您仍然认为它是合适的并且您的代码审查者同意,请使用
std::ignore =
关闭警告,这是简单、可移植且易于 grep 的。

- CppCoreGuidelines ES.48:避免强制类型转换

然而,这最终是风格偏好。您可以使用

(void)
static_cast<void>
std::ignore
。它们都是可以接受的,使用哪一种就见仁见智了。

重要的是您在整个项目中使用一致的风格,即,如果您使用

std::ignore
在一个地方丢弃结果,请在任何地方使用它。

© www.soinside.com 2019 - 2024. All rights reserved.