Error C3848:expression having type ‘const myCompare’ would lose some const-volatile qualifiers in order to call ‘bool myCompare::operator ()(int,int)’
const-volatile qualifiers:常量可变限
volatile影响编译器编译的结果,指volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。
volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。而优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中。而不是重新从i里面读
const:只读
class myCompare {
public:
bool operator()(int v1,int v2){
return v1 > v2;
}
};
std::set<int,myCompare> s; //报错 Error C3848
报错内容大概意思为:传入的参数表达式应具有“const myCompare”
类型,而你调用的“bool myCompare::operator ()(int,int)”
不具备const属性,会丢失const限定,所以无法通过编译。
故只要将operator()具有const属性便可,如下
class myCompare {
public:
bool operator()(int v1,int v2) const {
return v1 > v2;
}
};