簡體   English   中英

C ++編譯時檢查是否有副作用

[英]C++ Compile Time Check for Sideffects

一些編譯器支持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...
}

提出任何提議以檢查這些斷言是否成立

沒有實現效果推斷或效果類型化的C ++編譯器,因此充其量僅支持對純度的特別檢查。

對於效果打字的背景,我建議本·利普邁爾(Ben Lippmeier)的博士學位論文, 類型推斷和不純凈世界的優化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM