代码编译时没有错误,但time
无处声明。
幸运的是,错误已经消失,因为我将名称更改为mtime。但错误的本质是什么?什么是time
?
此程序的输出为1
。我想知道文件time
或其他地方是否有iostream
。
#include <iostream>
int main()
{
std::cout << time << std::endl;
return 0;
}
答案 0 :(得分:6)
这是time_t time(time_t*)
函数的地址,因为<iostream>
实现包含time.h
标头。地址will never be NULL并且可以隐式转换为布尔值,因此是1
的结果。你可能在Linux上使用g ++。
答案 1 :(得分:2)
我的怀疑是它是time_t time(time*)
函数,其operator<<
最佳匹配是bool
的函数(函数指针只是一个隐含的转换,远离bool
})。现在,假设它是一个指向实际有效函数的函数指针,它将转换为true
,然后打印为1
(如果未设置boolalpha
标志,则为默认值将布尔值打印为0/1)。
答案 2 :(得分:0)
有std::time
,但情况并非如此,因为std
不是使用的命名空间。
所以,必须是这个function:
time_t time(time_t * timer);
必须由iostream
标题隐式包含。
答案 3 :(得分:0)
C ++标准库函数在名称空间std
中定义。例如,<ctime>
标头是提供std::time
功能所必需的。但实际上,此功能由底层C库提供,其中没有名称空间的概念。因此,允许C ++标准库头文件在全局命名空间中定义某些函数。
来自cppreference的C compatibility headers部分的引用:
包括
<cstdlib>
肯定提供std::malloc
,也可能提供:: malloc。包括<stdlib.h>
肯定会提供::malloc
,也可能会提供std::malloc
。
因此,例如,在包含标准库头之后,可能恰好在全局命名空间中定义time
函数。这是标准允许的,但具体是实现。
答案 4 :(得分:0)
我发现了一个问题Why does iostream include time.h?验证了上面的答案,并解释了函数出现的原因。
这真的是函数time_t time(time_t * timer)
的工作:)