2014-09-26 96 views
0

我有一個關於const函數的問題:const函數可以在函數的本地對象上調用非const函數嗎?以下是我正在談論的一個示例:const函數可以在本地對象上調用非const函數嗎?

template <class T> 
Set<T> Set<T>::setUnion (const Set<T> & other) const 
{ 
    Set<T> unionSet; //create union set 
    unionSet.merge(internalStorage); //merge it with our current set 
    unionSet.merge(other.internalStorage); //merge it with other set, duplicates will not be added 

    return unionSet; 
} 

此函數帶兩組並返回集合的並集。但問題在於合併函數不是const,並且合併函數也調用了也不是const的add函數,所以我看不到任何其他方式創建一個只有這兩個函數的聯合集,因爲setUnion函數必須是const。

PS:我知道解決方案沒有做一個const函數,我這樣做的原因是因爲我的教授定義它是這樣的。謝謝。

回答

1

是的。 const成員函數的唯一限制是它不能修改其被調用的對象;它可以修改任何其他(非const)對象。

+0

例外:'mutable'成員。 – Deduplicator 2014-09-26 21:32:41

+0

@Deduplicator:的確,「const」的含義有許多細微差別,與這個問題無關。相關的一點是,它不會阻止修改除'* this'之外的任何內容。 – 2014-09-26 22:17:24

1

const成員函數意味着它接收this具有類型大致相當於T const *const this

這意味着你無法通過this調用任何非const功能,但它確實影響什麼你這樣做經過this(顯式或隱式)。


1.從技術上講,你真的不能寫出來的this類型真正正確的,但是我在這裏給出的類型是目前的討論非常接近。

相關問題