Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么STL是;“空的”;未调用成员函数";“我是空的?”;?_C++_Stl_Naming Conventions_Naming - Fatal编程技术网

C++ 为什么STL是;“空的”;未调用成员函数";“我是空的?”;?

C++ 为什么STL是;“空的”;未调用成员函数";“我是空的?”;?,c++,stl,naming-conventions,naming,C++,Stl,Naming Conventions,Naming,请从中检查std::vector 它说它有一个empty()成员函数: empty Test whether vector is empty (public member function ) http://www.cplusplus.com/reference/vector/vector/empty/ Signature : bool empty() const; 对我来说,空的意思应该是从这个容器中删除所有元素。但是,它是一个测试函数,用于检查容器是否为空。 我检查了所有其他的容器,所有的

请从中检查
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()
来代替呢?

Case样式 <> >为了保持与C++标准库的命名约定一致,我实际上已经将您所指的成员函数浸入了<强> >代码> iSimple()> <代码> <强>,而不是<代码> iSimple()。也就是说,遵循命名约定而不是命名约定。我们可以在其他成员函数中看到这种约定,例如,
push_back()
pop_back()


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

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


[[nodiscard]]
属性 在这些情况下,如果成员函数的名称同时对应于形容词和动词(例如,成员函数的名称为
empty
clear
clean
),则使用C++17的
[[nodiscard]]
属性可以非常有用地指示错误行为

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


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

STL方法
empty()
STL的创建者似乎不知道或决定不遵循有用的命名约定,即布尔变量和函数的名称以动词开头
empty()
,正如您所指出的,是一个模棱两可的名称,因为单词“empty”也可以用作动词,因此它可以建议一个动作,就像它建议一个查询一样,如果不是更多的话
是空的()
可以通过明确指示该方法执行查询来消除这种歧义。不幸的是,现在STL已经用这种命名约定标准化了