2015-05-15 46 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告訴編譯器(成員)函數不會修改對象實例。

相關問題