【问题标题】:Printing time function to console produces 1 [duplicate]打印到控制台的时间功能产生1 [重复]
【发布时间】:2018-09-24 12:01:34
【问题描述】:

我和几个开发人员想知道为什么:

std::cout<<std::time<<std::endl;

打印出一个值 1。这个值代表什么,为什么这个值是 1。

对发生的事情的回答: How to print function pointers with cout?

C++ 标准规定:

4.12 布尔转换

1 算术、枚举、指针或指向成员的指针的右值 type 可以转换为 bool 类型的右值。

引自匿名:

这是为函数指针指定的唯一转换。

编辑:下面的答案很好地展示了为什么打印 1 而不是任何 bool 的解决方案,并解释了何时不会出现 1。

【问题讨论】:

  • 可能从函数指针转换为bool。此处未调用std::time
  • 是的,我们有很多可能,但是当学习者提出要求时,我们希望得到一个明确的答案,而不是躲避子弹。
  • 答案由 Vittorio Romeo 提供。你忘了()。我希望它至少应该在普通编译器中调用警告。
  • 看起来像,谢谢。完成/终止欺骗的程序是什么?
  • @dstackflow 有人会为你标记问题。

标签: c++ language-lawyer function-pointers implicit-conversion ctime


【解决方案1】:

cppreference 说:

指向非静态成员的指针没有重载,指向 volatile 或函数指针(带有签名的指针除外) (10-12)重载接受)。尝试输出此类对象 调用到布尔的隐式转换,并且对于任何非空指针 值,打印值 1(除非设置了 boolalpha,在这种情况下 true 被打印出来)。

因此,您将函数指针 std::time 转换为 bool 并且始终为 true 没有 boolalpha 将输出设置为 1

【讨论】:

  • 值得注意的是,在某些编译器/设置下,可能会发出如下所示的警告(例如 gcc):warning: the address of 'time_t time(time_t*)' will never be NULL [-Waddress]
  • 几乎走开了,却不知道 1 是有选择地选择的,或者什么时候可能没有选择。很好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2021-09-15
  • 2015-08-23
  • 1970-01-01
  • 2020-06-05
  • 2020-11-14
  • 2020-05-17
  • 2016-07-07
  • 1970-01-01
相关资源
最近更新 更多