在C ++中澄清[[pure]]

时间:2013-10-09 20:57:51

标签: c++ c++14

阅读标准C ++属性的最新提案[[pure]]我留下了许多问题:

  1. [[pure]]函数可以读取const globals吗?
  2. [[pure]]函数可以读取静态const变量吗?
  3. [[pure]]函数可以写但不能读取指针或引用变量(并且仍然可能返回void)?

1 个答案:

答案 0 :(得分:4)

[[pure]],如果我没记错,需要100%确定特定输入应始终返回特定输出。考虑一个const全局变量和静态const全局变量应该永远不会改变状态,它应该没问题。最后,读取可以改变状态的指针将不是一个纯函数。如果你写入其他地方访问的指针,那么它有副作用,而不是[[pure]]。

你必须问自己,函数结果是否依赖于无关变量的状态,如果你回答是,那么它不是[[pure]]。您还必须问自己输入是否会对除返回值以外的任何内容产生影响。如果这是真的,那么它不是[[pure]]