在iostream或C++的其他地方有什么叫做时间吗?
这些代码编译没有错误,但time
宣告无处。在iostream或C++的其他地方有什么叫做时间吗?
幸运的是,由于我将名称更改为mtime,错误消失了。但是错误的本质是什么?什么是time
?
该程序的输出为1
。我想知道文件iostream
或其他地方是否有所谓的time
。
#include <iostream>
int main()
{
std::cout << time << std::endl;
return 0;
}
这是一个time_t time(time_t*)
功能为您的<iostream>
实施地址包括time.h
头。地址will never be NULL并且可以隐式转换为布尔值,因此1
的结果。你可能在Linux上使用g ++。
我怀疑是在于它的time_t time(time*)
功能,其operator<<
最佳匹配是一个采取bool
(函数指针仅仅是一个隐式转换远离bool
)。现在,假设它是一个指向实际有效函数的函数指针,它将转换为true
,然后打印为1
(如果boolalpha
标志未设置,则默认打印布尔值为0/1)。
C++标准库函数在命名空间std
中定义。例如,<ctime>
头部需要提供std::time
功能。但实际上,这个功能由底层C库提供,没有名称空间的概念。因此,C++标准库头允许在全局名称空间中定义某些函数。
从C compatibility headers部分引述在cppreference:
包括
<cstdlib>
绝对提供std::malloc
并且还可以提供:: malloc的。其中<stdlib.h>
明确提供::malloc
,也可能提供std::malloc
。
因此,例如,time
函数可能碰巧在包含标准库头后在全局名称空间中定义。这是标准允许的,但是是特定于实现的。
我发现了一个问题Why does iostream include time.h?验证上述答案并解释函数出现的原因。 它真的是功能的工作time_t time(time_t * timer)
:)
可能是['std :: time'](http://en.cppreference。com/w/cpp/chrono/c/time)函数,或者更确切地说是C等价的['time'](http://en.cppreference.com/w/c/chrono/time)。指向函数的指针将被视为始终为真的布尔值,而'true'将不会将操纵符或'std :: cout'中的设置标志打印为'1'。 –
什么是你的平台,你的编译器是什么? –