Qwe*_*tie 6 c++ c++-standard-library
我正在将一个Windows库移植到Android(使用GNU标准C++库选项,libstdc ++ - v3),VC和GNU库之间似乎有很多命名差异,例如:
_stricmp
被称为strcasecmp
替代_unlink
叫做 unlink
_scalb
叫做 scalbn
_finite
叫做 isfinite
_isnan
叫做 isnan
_itoa
并且itoa
似乎不存在于GNU C++中atoi
确实存在,但没有 atoi64
VC和GNU库的文档意味着它们实现了"ISO"C++,例如我可以从VC2008中获得一些警告,因为没有使用"ISO C++"名称,例如:"警告C4996:'itoa':不推荐使用此项目的POSIX名称,而是使用符合ISO C++标准的名称:_itoa." 类似地,GNU的手册说"GNU标准C++库v3是一个实现ISO 14882标准C++库的持续项目".
那么图书馆如何最终得到这些不同的名字呢?如何判断哪些名称更"标准"?
另外,libstdc ++ - v3 的索引是否存在,即库中所有函数的简单列表?我只能找到一本手册和" 源文档 ",它似乎没有提供功能列表.
Joh*_*eek 12
这与C++标准库几乎没有关系.它更多地与C99和POSIX有关.
strcasecmp
是libstdc ++碰巧实现的POSIX函数.msvcrt通常与POSIX保持一定的距离.unlink
是类似的 - 这是一个POSIX功能.scalbn
是C99标准中的函数名称.MSVC不支持C99.但是,它scalbn
是C++ 11的一部分,所以我希望它最终会出现在msvcrt中.isfinite
并且isnan
都是C99.itoa
既不是C99也不是POSIX.这是一个奇怪的野兽,只是在夜晚出现.我还要指出其他几个人已经指出的内容:在标准库中使用下划线实际上是非标准的任何函数前缀在技术上更为正确.这就是msvcrt中下划线激增的原因.