gpt4 book ai didi

c++ - std::chrono::duration 默认是如何构造的?

转载 作者:搜寻专家 更新时间:2023-10-31 02:09:38 25 4
gpt4 key购买 nike

cppreference.com默认构造函数是默认的。我还检查了 C++14 draft,它在默认构造函数上什么也没说,除了声明:constexpr duration() = default;

当我运行下面的代码时,我很惊讶。

chrono::seconds s;
cout << s.count() << endl;

每次我运行它时,程序都会打印一些任意数字:140737364037104140737078676496 等等。

似乎 s 没有很好地初始化。然后我检查了编译器 (GCC 4.8) 的 std::chrono::duration 实现。这个类有一个没有任何类内初始化器的 int 类型的数据成员(即 count)。并且构造函数是默认构造的。所以数据成员实际上是未初始化的。这就是程序总是打印一些任意数字的原因。

以下是我的问题:

  1. 这是正确的行为吗?或者编译器应该给数据成员一个类内初始化器?
  2. 如果这是正确的行为,为什么标准不为 std::chrono::duration 指定默认值,比如 0

最佳答案

由于优化,默认构造的持续时间未初始化为零。

引用 Vicente J. Botet Escriba 来自 ISO C++ Discussion 中的同一问题:

Hi, I guess is to follow the pattern don't pay for what you don't use, but Howard would explain it better.

If you want the representation to be default initialized to zero, you can just provide one that do that

std::chrono::duration<MyInt> d; // MyInt default constructor initialize the value to zero.

<chrono> 的首席设计师和作者确认并进一步解释了这一点时间实用程序(Howard Hinnant)

关于c++ - std::chrono::duration 默认是如何构造的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46402944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com