在iostream或C++其他地方有没有所谓的时间



代码编译没有错误,但time无处声明。

幸运的是,当我将名称更改为mtime时,错误已经消失。但是错误的本质是什么?什么是time

该程序的输出是 1 .我想知道文件中是否有任何称为time的东西iostream或某处。

#include <iostream>
int main()
{
    std::cout << time << std::endl;
    return 0;
}
它是

time_t time(time_t*)函数的地址,因为您的<iostream>实现包含time.h标头。该地址永远不会为 NULL,并且可以隐式转换为布尔值,因此是 1 的结果。你可能在Linux上使用g++。

我的怀疑是它是time_t time(time*)函数,其operator<<最佳匹配是采用bool的函数(函数指针只是远离bool的隐式转换)。现在,假设它是一个指向实际有效函数的函数指针,它被转换为 true ,然后将其打印为 1(如果未设置 boolalpha 标志,则默认将布尔值打印为 0/1)。

std::time ,但情况不应该如此,因为std不是使用的命名空间。

所以,它必须是这个函数:

time_t时间(time_t*计时器);

它必须由iostream标头隐式包含。

C++标准库函数在命名空间std中定义。例如,需要<ctime>标头才能提供std::time功能。但实际上,此功能由底层 C 库提供,其中没有命名空间的概念。因此,C++标准库标头也允许在全局命名空间中定义某些函数。

引用 cpp首选项中的 C 兼容性标头部分:

包括<cstdlib>肯定提供std::malloc,也可能提供::malloc。包括<stdlib.h>肯定提供::malloc,也可能提供std::malloc

因此,例如,在包含标准库标头后,time函数可能碰巧在全局命名空间中定义。这是标准允许的,但特定于实现。

我发现了一个问题 为什么iostream包含time.h? 验证上面的答案并解释该功能出现的原因。这实际上是功能的工作time_t time(time_t * timer) :)

相关内容

  • 没有找到相关文章

最新更新