为什么我不能在函数中使用常量qualfier? 您好,我正在使用C++内置的算法。我这里有这个代码: #include <string> #include <algorithm> #include <iterator> using namespace std; bool isDon(string& name) const { return name == "Don"; } string names[] = {"George", "Don", "Estelle", "Mike", "Bob"}; int main() { string* ptr; ptr = find_if(names, names+5, isDon); return 0; }

为什么我不能在函数中使用常量qualfier? 您好,我正在使用C++内置的算法。我这里有这个代码: #include <string> #include <algorithm> #include <iterator> using namespace std; bool isDon(string& name) const { return name == "Don"; } string names[] = {"George", "Don", "Estelle", "Mike", "Bob"}; int main() { string* ptr; ptr = find_if(names, names+5, isDon); return 0; },c++,C++,当我运行这个程序时,编译器给了我一个错误,在这个错误中我的isDon函数decellation驻留,它说我不能在那个函数decellation中使用cv限定符。这是为什么?常量正式生效,限定此指针。独立函数没有它:只有非静态成员函数才有。常量限定符只引用成员函数,并声明该函数不修改调用该成员函数的对象。语义是通过将其设为T常量*来实现的 对于自由函数来说,这是没有意义的。应该在不使用trailing常量的情况下声明此函数。它是一个自由函数,不属于类,因此函数为常量没有意义 请注意,还可以使用以下

当我运行这个程序时,编译器给了我一个错误,在这个错误中我的isDon函数decellation驻留,它说我不能在那个函数decellation中使用cv限定符。这是为什么?

常量正式生效,限定此指针。独立函数没有它:只有非静态成员函数才有。

常量限定符只引用成员函数,并声明该函数不修改调用该成员函数的对象。语义是通过将其设为T常量*来实现的


对于自由函数来说,这是没有意义的。

应该在不使用trailing常量的情况下声明此函数。它是一个自由函数,不属于类,因此函数为常量没有意义

请注意,还可以使用以下形式的lambda

ptr = find_if(names, names+5, [](string const& name){ return name == "Don"; });

使一个独立的函数const没有任何意义,只有类或结构成员函数可以是const


这是因为const告诉编译器成员函数不会修改对象实例。

函数名后的const限定符用于类内的函数;此函数不是类的一部分;常量告诉编译器函数不修改类内的成员

常量限定符只能用于类非静态成员函数


如果允许的话,你会期望const做什么?我想可以更清楚地说,它会影响这一点。
ptr = find_if(names, names+5, [](string const& name){ return name == "Don"; });