提问人:Zhang Kai 提问时间:10/6/2017 最后编辑:gsamarasZhang Kai 更新时间:10/6/2017 访问量:536
在 iostream 或 C++ 中的其他地方有什么叫做时间的东西吗?
Is there anything called time in iostream or somewhere else in C++?
问:
这些代码编译没有错误,但无处声明。time
幸运的是,当我将名称更改为 mtime 时,错误已经消失了。但错误的本质是什么?什么?time
该程序的输出是 。我想知道文件中或某处是否调用了任何内容。1
time
iostream
#include <iostream>
int main()
{
std::cout << time << std::endl;
return 0;
}
答:
它是函数的地址,因为您的实现包含标头。该地址永远不会为 NULL,并且可隐式转换为布尔值,因此 的结果为 。您可能在 Linux 上使用 g++。time_t time(time_t*)
<iostream>
time.h
1
我的怀疑是它是函数,其最佳匹配项是采用 a 的函数(函数指针只是远离 a 的隐式转换)。现在,假设它是一个指向实际有效函数的函数指针,它被转换为 ,然后将其打印为 (如果未设置标志,则默认为将布尔值打印为 0/1)。time_t time(time*)
operator<<
bool
bool
true
1
boolalpha
有 std::time
,但情况不应该如此,因为不是使用的命名空间。std
所以,它必须是这个功能:
time_t时间(time_t* 计时器);
它必须由标头隐式包含。iostream
C++ 标准库函数在命名空间中定义。例如,需要标头来提供功能。但实际上,此功能由底层 C 库提供,其中没有命名空间的概念。因此,C++ 标准库标头也允许在全局命名空间中定义某些函数。std
<ctime>
std::time
引用 cpppreference 中 C 兼容性标头部分:
包括 definitely 提供,也可能提供 ::malloc。包括肯定提供,也可能提供。
<cstdlib>
std::malloc
<stdlib.h>
::malloc
std::malloc
因此,例如,在包含标准库标头后,函数可能恰好在全局命名空间中定义。这是标准允许的,但特定于实现。time
我发现一个问题:为什么 iostream 包含 time.h? 验证上面的答案并解释函数出现的原因。
这真的是功能:)的工作time_t time(time_t * timer)
评论
std::time
函数,或者更确切地说是它的 C 等效时间
。指向函数的指针将被视为始终为 true 的布尔值,并且无需操作器或设置标志,将打印为 。true
std::cout
1