我知道你可以使用
static_cast<void>
,但它对我来说似乎太冗长了,没有反映最初的意图,我想丢弃返回值,而不是将其转换为任何东西。最近我偶然发现了一个 std::ignore
,它可以接受任何类型的值,名称清晰易读,对我来说似乎很合适。
std::tie
一起使用它来丢弃任何不需要的值,但我猜 static_cast
的初衷是出于比丢弃值更好的原因来实际转换值,因此编译器不会抱怨。那么,可以使用 std::ignore
来实现我在问题中描述的目的吗?
例如:
std::ignore = std::transform(...);
另请记住这是 C++14
是的,没关系。事实上,有些人认为这是更好的风格。
切勿强制转换为
来忽略(void)
返回值。如果您故意想要丢弃这样的结果,请首先认真考虑这是否真的是一个好主意(函数或返回类型的作者首先使用[[nodiscard]]
通常是有充分理由的)。如果您仍然认为它是合适的并且您的代码审查者同意,请使用[[nodiscard]]
关闭警告,这是简单、可移植且易于 grep 的。std::ignore =
- CppCoreGuidelines ES.48:避免强制类型转换
然而,这最终是风格偏好。您可以使用
(void)
、static_cast<void>
或 std::ignore
。它们都是可以接受的,使用哪一种就见仁见智了。
重要的是您在整个项目中使用一致的风格,即,如果您使用
std::ignore
在一个地方丢弃结果,请在任何地方使用它。