c++ - 为什么STL“空”成员函数不叫“isEmpty”?
问题描述
请std::vector
从cplusplus.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++ 标准库的命名约定保持一致,我实际上会将您所指的成员函数命名is_empty()
为isEmpty()
. 也就是说,遵循蛇案例命名约定而不是骆驼案例。我们可以在其他成员函数中看到这种约定,例如push_back()
和pop_back()
。
请注意,有一个调用的成员函数clear()
会清空容器。省略动词(即is of a hypothetical is_empty
)并因此需要较少输入的原因可能是用于查询容器是否为空(即,empty()
)和清空容器(即,clear()
)的名称分离。
否则,如果使用单词“empty”代替,对于查询和更新,动词可能是用于查询的成员函数名称的一部分,因为两个成员函数都没有参数。因此,重载是不可能的。然后可能会分别调用成员函数来清空容器empty()
和is_empty()
查询容器是否为空。
[[nodiscard]]
属性
在成员函数的名称同时对应形容词和动词的这些情况下(例如,名称为 或 的成员函数empty
)clear
,clean
使用 C++17 的[[nodiscard]]
属性对于指示不当行为非常有用。
例如,empty()
如std::vector
执行查询的成员函数,因此返回一个值,可以被标记 [[nodiscard]]
,这样如果返回值没有被使用,编译器就会发出警告。这个警告表明程序员可能已经使用empty()
了好像它确实清空了容器,但它实际上查询了容器是否为空。
但是请注意,编译器不需要发出警告。
推荐阅读
- dart - Dart 中是否有与 C++ 类似的 std::bind ?
- javascript - React 如何搜索(过滤)数组中的所有字段?
- css - Chrome 在过渡时仍然闪烁
- sql-server - SQL Server 2016 数据库备份和还原
- sql - 附加查询不起作用 Access 2016
- mysql - 用户在哪里 - 在 15 秒内增加选择?
- elasticsearch - elasticsearch-pyspark:即使在使用 spark 指定之后,也没有从文档中获取特定字段(获取所有字段)
- java - 火花 SQL sql("
").first().getDouble(0) 给我不一致的结果 - visual-studio-code - 将图标添加到树视图的正确方法是什么?
- java - 修改映射键 java - 性能