2015-05-15 193 views
0

你好,我正在使用C++内置算法。我有这样的代码在这里:为什么我不能在我的函数中使用const qualfier?

#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-预选赛。这是为什么?

+6

你所期望的'const'做,如果它被允许什么“一个const修饰词只能用于类非静态成员函数中使用”? – juanchopanza

回答

2

该功能应宣告没有trailinging const。它是一个自由函数,不属于一个类,所以对函数const没有意义。

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

请注意,您也可以使用表格

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

const影响(正式,合格)this指针。独立功能没有它:只有非静态会员功能做。

+0

我认为它会更清楚地说它影响'this'本身。 – Columbo

2

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

对于一个免费的功能,这只是没有意义。

2

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

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

相关问题