在讲座之前,我正在重新研究C++中的结构概念,并写了以下内容:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct isOdd{
bool operator()(int x){
return x%2;
}
};
int main(){
vector<int> v {3,4,2,1,65,2,4,65,2,9,8,5,7};
int count = count_if(begin(v), end(v), isOdd());
cout << "size of vector: " <<v.size() << endl;
cout << "count of odds: " <<count << endl;
return 0;
}
然后我意识到,在调用结构isOdd的函数时,我使用了语法:isOdd(),但仅覆盖了()运算符。因此,调用约定isOdd()的工作方式是因为调用结构的函数就像:
结构::函数名();
或structure-object.functions-name();或
有人可以阐明疑问吗?
谢谢。
最佳答案
不,您调用了隐式编译器生成的默认构造函数,从而创建了isOdd
的临时对象。
例如:如果要在一个数字上对其进行测试而不创建命名的isOdd
对象,则可以:
bool is_odd = isOdd()(4);
//^^ Creates a temporary object
优化编译器将避免创建临时对象,因为它既没有可见的副作用,也没有状态。