Что означает «состояние» в C ++? - PullRequest
0 голосов
/ 08 марта 2020

Когда я искал объяснения функтора C ++, я увидел следующее утверждение: «В функторах есть пара приятных моментов. Во-первых, в отличие от обычных функций, они могут содержать состояние».

Может Кто-нибудь объяснить мне, что означает "состояние" в C ++? Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 08 марта 2020

Что означает «состояние» ...

Слово имеет несколько значений и контекстуальных тонкостей.

Вот общее определение слова из словарь :

условие или способ существования, существующий в определенное время


... в C ++?

Насколько я знаю, для C ++ нет определенного значения c. Это не что-то определенное языком. Значение такое же, как в программировании или информатике в целом.

Вот специфика информатики c определение :

В области информационных технологий и компьютеров Наука, система описывается как отслеживающая состояние, если она предназначена для запоминания предшествующих событий или взаимодействия с пользователем; запоминаемая информация называется состоянием системы.

Состояние программы на C ++ состоит в основном из представления объектов.


"Есть несколько приятных моментов в функторах. Один из них в отличие от обычные функции, они могут содержать состояние. "

Хотя это" достаточно верно "на практике, это упрощение. Технически регулярные функции могут «содержать» global состояние. Но это, вероятно, игнорируется автором этой цитаты, поскольку глобальное состояние проблематично c и чего следует избегать.

3 голосов
/ 08 марта 2020

Предполагая, что вы на самом деле спрашиваете, что это означает в этом контексте :

Это означает, что функтор (т. Е. Экземпляр класса, реализующий оператор ()) может хранить и получать доступ информация, относящаяся к его конкретному экземпляру.

Обычная функция может получить доступ только к тем параметрам, которые переданы в нее, плюс глобальные переменные и т. д. c.

Однако пример с функтором:

#include <iostream>

struct Counter {
    int operator()() { return ++count; }

  private:
    int count = 0;
};

Counter count1;
Counter count2;

std::cout << count1() << std::endl; // 1
std::cout << count1() << std::endl; // 2
std::cout << count1() << std::endl; // 3

std::cout << count2() << std::endl; // 1
std::cout << count2() << std::endl; // 2
std::cout << count2() << std::endl; // 3

std::cout << count1() << std::endl; // 4
std::cout << count2() << std::endl; // 4

Здесь фактический счетчик инкапсулирован в экземпляре функтора - это состояние функтора .

...