【发布时间】:2021-04-17 03:21:48
【问题描述】:
我在网上冲浪,发现了在每个函数调用中计算数字的不同方法。
1。使用函子
class count_number {
private:
int number;
public:
count_number(): number{1} {}
void operator()() {
std::cout << "Number " << number++ << '\n';
}
};
...
count_number counter;
counter();
counter();
counter();
输出:
Number 1
Number 2
Number 3
2。使用 Lambda
他们说它们类似于函子,唯一的区别是它们的可变性。
...
// Prior to C++ 23:
auto counter = [number = 1]() mutable { std::cout << "Number " << number++ << '\n'; };
counter();
counter();
counter();
输出与上面完全相同。
3。使用静态变量
变量number 在每个函数调用中都保持不变。
void counter() {
static int number = 1;
std::cout << "Number " << number++ << '\n';
}
...
counter();
counter();
counter();
仍然输出完全相同。
问题是:
- 这三种方式在内存效率、性能和可读性方面的优缺点是什么。
- 您认为哪个最好,为什么?如果没有,那是什么?
- 除了持久化数据之外,在函数中包含静态变量有什么意义?
【问题讨论】:
-
您能提供您的“最佳”标准吗?您必须询问“创建非纯函数的最佳方法是什么”,据我所知没有客观答案。
标签: c++