2017-10-06 55 views
3

这些代码编译没有错误,但time宣告无处。在iostream或C++的其他地方有什么叫做时间吗?

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

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

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

可能是['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'。 –

+0

什么是你的平台,你的编译器是什么? –

回答

6

这是一个time_t time(time_t*)功能为您的<iostream>实施地址包括time.h头。地址will never be NULL并且可以隐式转换为布尔值,因此1的结果。你可能在Linux上使用g ++。

2

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

0

std::time,但不应该是这种情况,因为std不是使用的命名空间。

所以,它必须是此function

time_t的时间(time_t的*定时器);

它必须被iostream头默认包含。

0

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

C compatibility headers部分引述在cppreference:

包括<cstdlib>绝对提供std::malloc并且还可以提供:: malloc的。其中<stdlib.h>明确提供::malloc,也可能提供std::malloc

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

0

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

相关问题