gpt4 book ai didi

c++ - 为什么 STL "empty"成员函数没有调用 "isEmpty"?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:30 25 4
gpt4 key购买 nike

请检查 cplusplus.com 中的 std::vector .

它说它有一个 empty() 成员函数:

empty
Test whether vector is empty (public member function )
http://www.cplusplus.com/reference/vector/vector/empty/
Signature : bool empty() const;

对我来说,空的意思应该是从这个容器中删除所有元素。但是,它是一个测试函数,用于检查容器是否为空。我检查了所有其他容器,并且都以相同的方式使用空容器。

为什么 STL 不使用 isEmpty() 代替?

最佳答案

案例样式

为了与 C++ 标准库的命名约定保持一致,我实际上会将您所指的成员函数命名为 is_empty() 而不是 isEmpty()。也就是说,在 snake case 之后命名约定而不是 camel case一。我们可以在其他成员函数中看到这种约定,例如 push_back()pop_back()


请注意,有一个名为 clear() 的成员函数可以清空容器。也许省略动词(即假设 is_emptyis)并因此需要较少打字的原因可能是 的名称分离查询容器是否为空(即empty())和清空 容器(即 clear())。

否则,如果查询和更新都使用“empty”这个词,动词可能是用于查询的成员函数名称的一部分,因为两个成员函数都没有参数。因此重载是不可能的。然后可能会调用成员函数 empty()is_empty() 分别清空容器和查询容器是否为空。


[[nodiscard]] 属性

在这些情况下,成员函数的名称同时对应于形容词动词(例如,名称为empty 的成员函数>、clearclean),使用 C++17 的 [[nodiscard]] 属性对于指示不当行为非常有用。

例如,std::vector 中的 empty() – 执行查询 的成员函数,因此返回一个value – 可以标记为 [[nodiscard]],这样如果返回值未被使用,编译器会发出警告。此警告表示程序员可能使用了 empty(),就好像它确实清空了容器,但它实际上查询的是容器是否为空。

但是请注意,编译器不需要发出警告。

关于c++ - 为什么 STL "empty"成员函数没有调用 "isEmpty"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55135525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com