Which library does strlen() belong to? Does it belong to cstring? or string?
都不是. cstring和string不是库,它们是定义各种功能和类的接口的头文件.
C语言标准表示strlen函数在头文件< string.h> ;.中声明.在C中,包括< string.h>将strlen放入全局命名空间中,同时包含< cstring>而是将strlen放入std命名空间.
strlen函数的实际实现在C标准库(某些平台上也称为libc或CRT).通常,这与链接时与您的可执行文件相关联.
Why it works without including library string or cstring?
在您的特定编译器和工具链中,只是头文件< iostream>包括< cstring>进入它,这意味着任何包含前者的代码也可以免费得到后者.这是一个实现细节,不应该依赖 – 如果你编译你的代码与另一个编译器,你可能会突然发现自己在编译器错误的海洋.
正确的做法是还要包括< cstring>这里;即使您的特定编译器不需要它,也可能需要与其他编译器.