为什么我不能在我的函数中使用const qualfier?

时间:2015-05-15 15:56:26

标签: c++

您好我正在使用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;
}

当我运行这个程序时,编译器给了我一个错误,其中我的isDon()函数decleration驻留,这表示我不能在该函数decleration中使用cv-qualifier。那是为什么?

5 个答案:

答案 0 :(得分:3)

const影响(正式,限定)this指针。独立式功能没有它:只有非静态成员功能。

答案 1 :(得分:2)

const限定符仅引用成员函数,并声明该函数不会修改调用该成员函数的对象。通过使this成为T const*来实现语义。

对于免费功能,这没有意义。

答案 2 :(得分:2)

应该在没有tra const的情况下声明此函数。它是一个自由函数,不属于某个类,因此函数const没有意义。

bool isDon(string const& name) {
    return name == "Don";
}

请注意,您还可以使用

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

函数名后的const限定符用于函数 INSIDE a class ;这个功能不是一个类的一部分; const告诉编译器该函数不会修改类中的成员。

“const限定符只能用于非静态成员函数类”

const type qualifier soon after the function name