## ignore 的使用
[ignore - cppreference](https://zh.cppreference.com/w/cpp/utility/tuple/ignore)
主要有两种使用方式,一种是通过将返回值传递给`std::ignore`来消除 `[[nodiscard]]`注解在未使用返回值时发出的警告,另一种是在使用`std::tie`解包时省略不需要的实惨
### 消除警告
```cpp
[[nodiscard]] int dont_ignore_me(){
return 0;
}
int main(){
dont_ignore_me();
return 0;
}
```
会出现一个编译警告
```cpp
<source>:8:5: warning: ignoring return value of function declared with 'nodiscard' attribute [-Wunused-result]
8 | dont_ignore_me();
| ^~~~~~~~~~~~~~
```
在确定不需要返回值的情况下,我们就可以使用`std::ignore`来忽略
```cpp
std::ignore = dont_ignore_me();
```
如果您还在使用古早的标准,无法使用 `std::ignore` 忽略时,可以使用`void`转换,也可以达到目的
```cpp
(void)dont_ignore_me();
```
### 在 tie 中使用
```cpp
#include <print>
int main() {
int a{0};
std::tuple<int, float, char> info{1, 2.2, '3'};
std::tie(a, std::ignore, std::ignore) = info;
std::println("a = {}", a);
return 0;
}
```
## ignore 的实现
从需求出发,我们需要任意类型作为参数的`operator=`函数并且什么也不做
```cpp
#include <print>
namespace my {
struct ignore_type {
template <typename T>
const ignore_type& operator=(const T&) const {
return *this;
}
};
constexpr ignore_type ignore{};
}
int main() {
int a{0};
std::tuple<int, float, char> info{1, 2.2, '3'};
std::tie(a, my::ignore, my::ignore) = info;
std::println("a = {}", a);
return 0;
}
```