为啥 std::forward_list::empty 有 [[nodiscard]] 而 std::forward_list::max_size 没有? [复制]

Posted

技术标签:

【中文标题】为啥 std::forward_list::empty 有 [[nodiscard]] 而 std::forward_list::max_size 没有? [复制]【英文标题】:Why does std::forward_list::empty has [[nodiscard]] while std::forward_list::max_size doesn't? [duplicate]为什么 std::forward_list::empty 有 [[nodiscard]] 而 std::forward_list::max_size 没有? [复制] 【发布时间】:2020-07-18 16:28:42 【问题描述】:

std::forward_list的documentation中,有两个成员函数:

    [[nodiscard]] bool empty() const noexcept; size_type max_size() const noexcept;

让我吃惊的是:

为什么empty[[nodiscard]]max_size 没有?

【问题讨论】:

我猜委员会还没有解决这个问题。似乎所有empty 方法都立即获得了它。 【参考方案1】:

原因分为两部分:

    没有办法混淆查询“最大大小是多少?”表示为.maximum_size() 与其他任何内容,而您可能会混淆查询“它是空的吗?”表示为.empty(),使用命令“empty it!”,得到名称.clear()

    [[nodiscard]] 是新的,并且尚未在标准库中适用的所有地方应用(迄今为止)。 C++20 增加了一些地方,但还不够全面。

【讨论】:

好吧,我可以想象有人可以阅读max_size() 来表示调整到最大支持的大小。我在想初学者有时如何写char my_input[99999]; 或类似的东西来“足够大,以防万一”。有人可能认为为他们的应用程序分配非常大的缓冲区是个好主意,并将max_size 视为为他们的目的而设计的功能。编辑:当然,这似乎比empty() 错误更罕见。 @FrançoisAndrieux 很好地证明了绝对的新秀确实令人难以置信。

以上是关于为啥 std::forward_list::empty 有 [[nodiscard]] 而 std::forward_list::max_size 没有? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?