当我在寻找C++函子的解释时,我看到了以下语句,"函子有几个好处。一个是与常规函数不同,它们可以包含状态。">
有人能向我解释一下"状态"在C++中的含义吗?非常感谢。
"state"是什么意思。。。
这个词有多种含义和上下文微妙之处。
以下是字典中这个词的一般定义:
在特定时间存在的条件或存在方式
。。。在C++中?
据我所知,这个词没有C++特定的含义。它不是语言指定的东西。其含义与一般编程或计算机科学中的含义相同。
以下是计算机科学的具体定义:
在信息技术和计算机科学中,如果一个系统被设计为记住之前的事件或用户交互,则它被描述为有状态的;记住的信息被称为系统的状态。
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
这里,实际计数封装在函子实例中——它是函子的状态。