C++ 属性: nodiscard (C++17 起)

来自cppreference.com
< cpp‎ | language‎ | attributes

若从异于转型到 void弃值表达式,调用声明为 nodiscard 的函数或以值返回声明为 nodiscard 的枚举或类的函数,则鼓励编译器发布警告。

目录

[编辑] 语法

[[nodiscard]]

[编辑] 解释

出现在函数声明、枚举声明或类声明中。

若从异于转型到 void弃值表达式,调用声明为 nodiscard 的函数或以值返回声明为 nodiscard 的枚举或类的函数,则鼓励编译器发布警告。

[编辑] 示例

struct [[nodiscard]] error_info { };
error_info enable_missile_safety_mode();
void launch_missiles();
void test_missiles() {
   enable_missile_safety_mode(); // 编译器可在舍弃 nodiscard 值时警告
   launch_missiles();
}
error_info& foo();
void f1() {
    foo(); // 不是以值返回 nodiscard 类型,无警告
}


[编辑] 标准库

下列标准函数声明为带 nodiscard 属性:

分配函数
分配函数
(函数) [编辑]
分配未初始化的存储
(std::allocator 的公开成员函数) [编辑]
[静态]
用分配器分配未初始化的存储
(std::allocator_traits 的公开静态成员函数) [编辑]
分配内存
(std::pmr::memory_resource 的公开成员函数) [编辑]
分配内存
(std::pmr::polymorphic_allocator 的公开成员函数) [编辑]
用外层分配器分配未初始化存储
(std::scoped_allocator_adaptor 的公开成员函数) [编辑]
检查是否为空的函数
(C++17)
检查容器是否为空
(函数模板) [编辑]
检查结点把柄是否为空
(node handle 的公开成员函数)
检查容器是否为空
(std::array 的公开成员函数) [编辑]
检查字符串是否为空
(std::basic_string 的公开成员函数) [编辑]
检查视图是否为空
(std::basic_string_view 的公开成员函数) [编辑]
检查容器是否为空
(std::deque 的公开成员函数) [编辑]
检查容器是否为空
(std::forward_list 的公开成员函数) [编辑]
检查容器是否为空
(std::list 的公开成员函数) [编辑]
检查容器是否为空
(std::map 的公开成员函数) [编辑]
检查匹配是否成功
(std::match_results 的公开成员函数) [编辑]
检查容器是否为空
(std::multimap 的公开成员函数) [编辑]
检查容器是否为空
(std::multiset 的公开成员函数) [编辑]
检查底层的容器是否为空
(std::priority_queue 的公开成员函数) [编辑]
检查底层的容器是否为空
(std::queue 的公开成员函数) [编辑]
检查容器是否为空
(std::set 的公开成员函数) [编辑]
检查底层的容器是否为空
(std::stack 的公开成员函数) [编辑]
检查容器是否为空
(std::unordered_map 的公开成员函数) [编辑]
检查容器是否为空
(std::unordered_multimap 的公开成员函数) [编辑]
检查容器是否为空
(std::unordered_multiset 的公开成员函数) [编辑]
检查容器是否为空
(std::unordered_set 的公开成员函数) [编辑]
检查容器是否为空
(std::vector 的公开成员函数) [编辑]
检查路径是否为空
(std::filesystem::path 的公开成员函数) [编辑]
杂项
(C++11)
异步运行函数(有可能在新线程中)并返回保有结果的 std::future
(函数模板) [编辑]
(C++17)
指针优化屏障
(函数模板) [编辑]