我在讲座之前重新审视了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();
有人可以详细说明疑问吗?
感谢。
答案 0 :(得分:1)
然后我意识到在调用结构函数isOdd时,我有 使用语法:isOdd()但我只重写了()运算符。
不,您调用了隐式编译器生成的默认构造函数,从而创建了isOdd
的临时对象。
例如:如果您想在单个数字上测试它而不创建命名的isOdd
对象,您可以:
bool is_odd = isOdd()(4);
//^^ Creates a temporary object
优化编译器将忽略临时对象的创建,因为它既没有可观察的副作用也没有状态。