gpt4 book ai didi

c++ - 为什么遗留 C 标识符不需要 namespace 标准?

转载 作者:可可西里 更新时间:2023-11-01 18:38:25 26 4
gpt4 key购买 nike

此代码是正确的 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::版本。我想知道的是这种行为背后的基本原理。

最佳答案

自 C++11 起,实现正式允许将 C 标准库名称定义在 <cxxx> 中全局命名空间中的 header 。这并不意味着它们是必需的,因此您的第二个代码示例可能会在不同的平台上失败。

也就是说std不需要 C 标识符并不完全正确。某些实现可能不需要它,仅此而已。

请注意,在 C++11 之前,许多实现无论如何都会这样做,尽管从技术上讲它们不应该这样做。

关于c++ - 为什么遗留 C 标识符不需要 namespace 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32719536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com