функциональное программирование — проверка времени компиляции C ++ на наличие побочных эффектов

Некоторые компиляторы поддерживают чистый и постоянный, но есть ли предложение проверить, что эти утверждения верны? Например:

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...
}

2

Решение

сделать любое предложение, чтобы проверить, что эти утверждения верны

Компиляторов C ++, реализующих вывод эффектов или типизацию эффектов, не существует, поэтому в лучшем случае поддерживаются только специальные проверки на чистоту.

Для справки по типизации эффектов я предлагаю кандидатскую диссертацию Бена Липпмайера: Вывод типа и оптимизация для нечистого мира

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]