在iostream或C ++中的其他地方有什么时间吗?

时间:2017-10-06 09:36:07

标签: c++ time iostream standard-library c++-standard-library

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

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

此程序的输出为1。我想知道文件time或其他地方是否有iostream

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

5 个答案:

答案 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)的工作:)