2

一部のコンパイラはpureとconstをサポートしていますが、これらのアサーションが保持されていることを確認するためのオファーはありますか?例えば:

int global_value = 42;
const int global_value_const = 42;

int MyPureFunction  __attribute__ (( pure_check? )) (
  int input,
  int* input_ptr,
  const int* input_const_ptr,
  int foo& input_ref,
  const int& input_const_ref)
{
   int temporary = input;    // Valid, can read local but mutable state.

   global_value += temporary;        // Invalid, cannot mutate external state
   temporary += global_value;        // Invalid,  cannot read non-const global data.
   temporary += global_value_const;  // Valid, can read const global data.

   temporary += *input_ptr;        // Invalid, cannot derefernece non-const ptr.
   temporary += *input_const_ptr;  // Valid, can dereference a const ptr.
   temporary += input_ref;         // Invalid, cannot use non-const reference.
   temporary += foo->value;        // Valid, can reference a const reference.

   return temporary;     // Valid., if all invalid statements above are removed...
}
4

1 に答える 1

5

これらのアサーションが保持されていることを確認するためのオファーを行う

効果の推論または効果の型指定を実装するC++コンパイラはないため、せいぜい純度のアドホックチェックのみがサポートされます。

効果タイピングの背景については、Ben Lippmeierの博士論文、型推論、および不純な世界の最適化をお勧めします。

于 2012-12-26T12:53:23.163 に答える