【发布时间】:2020-04-21 08:19:32
【问题描述】:
正如我从《Effective C++》一书中了解到的,如果我通过 Function Object 的值而不是 C++ 中的函数引用或函数指针传递一个 Function Object,它的性能会更好。那么现代编译器如何优化这种场景呢?
或者说通常我们不建议通过值传递我们自定义类的对象,但作为函数对象实际上与普通对象相同,只是实现了“operator()”在课堂上。那么,在通过值传递这两个东西时,编译器必须有一些不同的东西,对吧?
下面是一个比较函数对象和函数指针的例子。
#include <algorithm>
#include <vector>
#include <ctime>
#include <iostream>
bool cmp(int a, int b) { return a < b; }
int main() {
std::vector<int> v(10000000);
for (size_t i = 0; i < 10000000; ++i)
v.push_back(rand());
std::vector<int> v2(v);
std::sort(v.begin(), v.end(), std::less<int>()); // This way would be faster than below;
std::sort(v2.begin(), v2.end(), cmp);
}
【问题讨论】: