【问题标题】: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*) 函数的地址,因为您的&lt;iostream&gt; 实现包括time.h 标头。地址will never be NULL 可以隐式转换为布尔值,因此是1 的结果。您可能在 Linux 上使用 g++。

【讨论】:

    【解决方案2】:

    我怀疑它是time_t time(time*) 函数,其operator&lt;&lt; 最佳匹配是采用bool 的那个(函数指针只是从bool 的隐式转换)。现在,鉴于它是一个指向实际有效函数的函数指针,它被转换为true,然后打印为1(如果未设置boolalpha标志,则默认将布尔值打印为0 / 1).

    【讨论】:

      【解决方案3】:

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

      所以,一定是这个function

      time_t时间(time_t*定时器);

      必须由iostream 标头隐式包含。

      【讨论】:

        【解决方案4】:

        C++ 标准库函数在命名空间std 中定义。例如,&lt;ctime&gt; 标头需要提供std::time 功能。但在实践中,这个功能是由没有命名空间概念的底层 C 库提供的。因此,C++ 标准库头文件也允许在全局命名空间中定义某些函数。

        引用 cppreference 中C compatibility headers 部分的内容:

        包括&lt;cstdlib&gt; 肯定提供std::malloc,也可能提供::malloc。包括&lt;stdlib.h&gt;肯定提供::malloc,也可能提供std::malloc

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2023-04-05
            • 1970-01-01
            • 1970-01-01
            • 2014-11-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多