【问题标题】:Is there anything called time in iostream or somewhere else in C++?在 iostream 或 C++ 中的其他地方有什么叫做时间的东西吗?
【发布时间】:2018-03-18 01:58:30
【问题描述】:
代码编译没有错误,但time 没有声明。
幸运的是,当我将名称更改为 mtime 时,错误已经消失。但是错误的本质是什么?什么是time?
这个程序的输出是1。我想知道 iostream 文件中是否有任何名为 time 的内容。
#include <iostream>
int main()
{
std::cout << time << std::endl;
return 0;
}
【问题讨论】:
-
可能是 std::time 函数,或者更确切地说是它的 C 等效函数 time。指向函数的指针将被视为始终为 true 的布尔值,并且 true 将在 std::cout 中没有操纵器或设置标志时打印为 1。
-
标签:
c++
time
iostream
standard-library
c++-standard-library
【解决方案1】:
这是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).
【解决方案3】:
有std::time,但不应该是这样,因为std 不是使用的命名空间。
所以,一定是这个function:
time_t时间(time_t*定时器);
必须由iostream 标头隐式包含。
【解决方案4】:
C++ 标准库函数在命名空间std 中定义。例如,<ctime> 标头需要提供std::time 功能。但在实践中,这个功能是由没有命名空间概念的底层 C 库提供的。因此,C++ 标准库头文件也允许在全局命名空间中定义某些函数。
引用 cppreference 中C compatibility headers 部分的内容:
包括<cstdlib> 肯定提供std::malloc,也可能提供::malloc。包括<stdlib.h>肯定提供::malloc,也可能提供std::malloc。
因此,例如,time 函数可能恰好在包含标准库头文件后定义在全局命名空间中。这是标准允许的,但特定于实现。