2014-01-23 94 views
3

我想了解一塊C++代碼,我已經到了一個地步,我不明白以下的含義:函數原型的常量參數

以下是在函數原型文件中定義的,又名(.H)

我什麼困惑一下,是常量的參數:

ofMesh getImageMesh() const; 

我的意思是,函數/方法返回一個類ofMesh的,getImageMes​​h()沒有參數和 然後常量如下。爲什麼像這樣使用「const」?

+1

http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list?rq=1 –

回答

2

這是一個const方法,這意味着你可以調用它const的對象,也不會改變非mutable成員,也不會調用其他非const方法。

struct X 
{ 
    void foo(); 
    int x; 
    void goo() const; 
}; 

void X::goo() const 
{ 
    x = 3; //illegal 
    foo(); //illegal 
} 

//... 
const X x; 
x.foo(); //illegal 
x.goo(); //OKAY 
+0

而且這也允許編譯做某些優化。 – mindo

+0

'const'提供的程序穩定性的提高不能被高估。 – Bathsheba

+1

@mindo:不,它不。 const和優化是不同的事情。不要忘記有可變關鍵字和const_cast關鍵字,因爲標記爲const的東西並不意味着它永遠不會改變! – Skizz

2

基本上,這意味着該方法不會修改該類的實例的狀態。這意味着它也不會調用會改變類實例狀態的其他成員。

OK:

class Foo 
{ 
    int m_foo; 
    int GetFoo() const 
    { 
     return m_foo; 
    } 
} 

編譯錯誤:

class Foo 
{ 
    int m_foo; 
    int GetFoo() const 
    { 
     m_foo += 1; 
     return m_foo; 
    } 
} 

還有更深層次的考慮,如性能優勢通過引用傳遞的時候 - 如果你想要去更深,搜索的術語'const正確性'。

0

此行中的const表示它是一個常量函數。這意味着它不能修改它裏面的對象。

因此,如果您聲明瞭成員函數const,那麼您告訴編譯器可以爲const對象調用該函數。沒有明確聲明const的成員函數被視爲將修改對象中的數據成員的成員函數,編譯器將不允許您將其稱爲const對象。