为什么传统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?

下一篇: Why is there no specialisation for std::shared