关于namespace std的问题
在Thinking in C++ 的C09:cpptime.h 下面这样一段:
====
#include <ctime>
#include <cstring>
class Time {
std::time_t t;
std::tm local;
char asciiRep[26];
unsigned char lflag, aflag;
void updateLocal() {
if(!lflag) {
local = *std::localtime(&t);
lflag++;
}
}
void updateAscii() {
if(!aflag) {
updateLocal();
std::strcpy(asciiRep,std::asctime(&local));
aflag++;
}
}
};
====
请教高手,strcpy 是否属于 std 名字空间?
[解决办法]
#include <cstring>
<cstring> 是与C标准库的 <string.h> 相对应,但裹有std名字空间的版本
[解决办法]
也就是说
#include <cstring> //包装至std名字空间
using namespace std;
等价于
#include <string.h> //未包装至std名字空间
[解决办法]
在 <cstdio> 里有定义
_STD_BEGIN
using ::size_t; using ::fpos_t; using ::FILE;
using ::clearerr; using ::fclose; using ::feof;
using ::ferror; using ::fflush; using ::fgetc;
using ::fgetpos; using ::fgets; using ::fopen;
using ::fprintf; using ::fputc; using ::fputs;
using ::fread; using ::freopen; using ::fscanf;
using ::fseek; using ::fsetpos; using ::ftell;
using ::fwrite; using ::getc; using ::getchar;
using ::gets; using ::perror;
using ::putc; using ::putchar;
using ::printf; using ::puts; using ::remove;
using ::rename; using ::rewind; using ::scanf;
using ::setbuf; using ::setvbuf; using ::sprintf;
using ::sscanf; using ::tmpfile; using ::tmpnam;
using ::ungetc; using ::vfprintf; using ::vprintf;
using ::vsprintf;
_STD_END
所以,你要使用std::printf
必须包含 #include <cstdio>
string, vector, iostream, 等都包含cstdio
所以你只要包含string, vector, iostream其中一个
或者直接
#include <cstdio>