首页 > 解决方案 > 为什么STL“空”成员函数不叫“isEmpty”?

问题描述

std::vectorcplusplus.com检查。

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

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

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

为什么不使用 stlisEmpty()代替?

标签: c++stlnaming-conventionsnaming

解决方案


案例风格

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


请注意,有一个调用的成员函数clear()清空容器。省略动词(即is of a hypothetical is_empty)并因此需要较少输入的原因可能是用于查询容器是否为空(即,empty())和清空容器(即,clear())的名称分离。

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


[[nodiscard]]属性

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

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

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


推荐阅读