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)
的功劳:)
代码编译没有错误,但是 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.
我怀疑它是 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 providesstd::malloc
and may also provide ::malloc. Including<stdlib.h>
definitely provides::malloc
and may also providestd::malloc
.
因此,例如,time
函数可能恰好在包含标准库 header 后在全局命名空间中定义。这是标准允许的,但特定于实现。
我发现了一个问题 Why does iostream include time.h? 验证了上面的答案并解释了函数出现的原因。
真是函数time_t time(time_t * timer)
的功劳:)