## 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; } ```