为什么传统C标识符不需要名称空间标准?
这段代码是正确的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
,...)专门解决了这一问题。
编辑 :链接的问题不是重复的,它询问是否应该使用遗留函数的std::
版本。 我想知道的是这种行为的基本原理。
自C ++ 11以来,正式允许实现将<cxxx>
头文件中定义的C标准库名称放入全局名称空间中。 这并不意味着它们被要求,所以你的第二个代码示例可能会在另一个平台上失败。
所以说C标识符不需要std
是不完全正确的。 在某些实现中可能不需要,就是这样。
请注意,在C ++ 11之前,许多实现都是这样做的,尽管在技术上他们不应该这样做。
链接地址: http://www.djcxy.com/p/29243.html上一篇: Why is namespace std not required for legacy C identifiers?