可以跨静态断言维护状态吗?

时间:2015-05-26 04:06:58

标签: c++ constexpr static-assert

不久前遇到了这种需求,并被迫解决这个问题。我想知道是否有一种方法可以在编译时检查中携带状态。

例如,一个激励性的例子是如何设置计数器,以便您可以执行以下操作:

04

每次后续调用都会将结果增加1.我特别感兴趣的是在编译时完成此操作。我已经尝试将foo设置为带有内部计数器的constexpr,但随后命中了只读约束。我想知道当前的C ++标准是否可以采用这些方法。

<div class="group55">
<input type="radio" class="toggle1" id="toggle1" name="group" checked />
<input type="radio" class="toggle2" id="toggle2" name="group" />
<div class="panel1">
panels 1
</div>
</div>

1 个答案:

答案 0 :(得分:0)

这在编译时是不可行的:

  1. myTest等对象在运行时实例化。
  2. 对象可能通过引用或值传递给函数。编译函数时,编译器无法确定哪个是它所引用的原始对象。
  3. 如果你的状态是独立于对象的,并且如果它在编译时是可行的,那么状态将取决于每个单独编译单元中状态查询的相遇顺序,而不是执行流程(例如,状态在循环中引用它,它在整个循环中只有一个常量值,无论是否有1或1000次迭代)。
  4. 但是在运行时它很容易,有正常的变量和断言。