iostream 或 C++ 中的其他地方是否有称为时间的东西?

Is there anything called time in iostream or somewhere else in C++?

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

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

这个程序的输出是1。我想知道文件 iostream 或某处是否有任何名为 time 的东西。

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

它是 time_t time(time_t*) 函数的地址,因为您的 <iostream> 实现包括 time.h header。地址 will never be NULL 并且可以隐式转换为布尔值,因此是 1 的结果。您可能在 Linux.

上使用 g++

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

std::time,但事实并非如此,因为 std 不是使用的命名空间。

所以,它必须是这样 function:

time_t time (time_t* timer);

必须由 iostream header 隐式包含。

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

引自 cppreference 中的 C compatibility headers 部分:

including <cstdlib> definitely provides std::malloc and may also provide ::malloc. Including <stdlib.h> definitely provides ::malloc and may also provide std::malloc.

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

我发现了一个问题 Why does iostream include time.h? 验证了上面的答案并解释了函数出现的原因。 真是函数time_t time(time_t * timer)的功劳:)