这段代码是正确的C:
#include <ctime> int main() { std::time_t t = std::time(nullptr); }
但是,这也编译得很好(GCC 5.2):
#include <ctime> int main() { time_t t = time(nullptr); }
更一般地说,传统的“C”数据类型和函数似乎不需要命名空间限定.
在我看来,这是一种危险的行为,因为两者都被接受,名称冲突的可能性仍然存在.我想(错误的?)标准命名空间std是为了保护我免受此攻击.
所以我的问题是:为什么标准化委员会在C 11中允许这样的行为?我的分析错了吗?
我理解遗留代码的问题,但我虽然“.h”头文件(iostream.h,…)专门用于解决这一问题.
编辑:linked question不是重复,它询问是否应该使用遗留函数的std ::版本.我想知道的是这种行为背后的基本原理.