有人把这篇文章给我的注意,声称(我意译)的STL长期被误指整个C++标准库,而不是从SGI STL中采取的部分.
(...)它指的是"STL",尽管很少有人仍然使用STL(在SGI设计).
C++标准库的一部分基于STL的一部分,正是这些部分,许多人(包括几位作者和臭名昭着的错误记录的cplusplus.com)仍然称为"STL".但是,这是不准确的; 事实上,C++标准从未提及"STL",两者之间存在内容差异.
(...)"STL"很少用于指代恰好基于SGI STL的stdlib的位.人们认为这是整个标准库.它被放在简历上.这是误导.
我几乎不了解C++的历史,所以我不能判断文章的正确性.我应该避免使用术语STL吗?或者这是一个孤立的意见?
我正在看的assert()参考页,虽然我读给定的例子,我卡住了:
/* assert example */
#include <stdio.h>
#include <assert.h>
int main ()
{
FILE * datafile;
datafile=fopen ("file.dat","r");
assert (datafile);
fclose (datafile);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,如果datafile比较等于0,则assert用于中止程序执行,这在前一次调用fopen时不成功.
我完全同意,如果fopen()失败,assert()将中止执行.但是我担心这个例子的正确性:
在我看来assert()是检测通常不会发生的情况(比如传递一个NULL指向函数的指针,该函数的文档声明它是被禁止的).
在此示例中,无法打开文件不是通常不会发生的事情.事实上,我可以看到为什么会失败的几十个原因.该文件不存在,程序可以在没有所需权限的情况下运行,依此类推.
我宁愿做类似的事情:
/* not longer an assert example */
#include <stdio.h>
#include <assert.h>
int main ()
{
FILE * datafile;
datafile=fopen ("file.dat","r");
if (datafile != NULL)
{
// Do something, whatever.
fclose (datafile);
} else
{ …Run Code Online (Sandbox Code Playgroud)