簡體   English   中英

編譯器如何確定要使用哪個函數?

[英]How does compiler determine which function to use?

眾所周知,編譯器通過重載的函數簽名(例如參數類型)來確定函數,但是這是如何工作的:

v[i] = 1;

當編譯器查看以下兩個重載函數時:

const T& operator[](size_t i) const;
T& operator[](size_t i);

如何確定要使用哪個? 編譯器是否嘗試使用第一個,然后發現它不起作用,然后嘗試使用第二個?

如果對象是非const,則調用該函數的非const版本(如果可用),否則調用const版本。 現在看看哪個是:

const T& operator[](size_t i) const;   //CONST MEMBER FUNCTION
T& operator[](size_t i);               //NON-CONST MEMBER FUNCTION

一個例子,

void f(std::vector<int> const &v1, std::vector<int> & v2)
{
   std::cout << v1[0] << std::endl; //invokes const version    
   std::cout << v2[0] << std::endl; //invokes non-const version
}

現在,當您編寫時:

v[i] = 1; 

如果我不假設vstd::vector ,則取決於v的常數。 如果v是const,則將調用const-version,否則將調用非const版本(如果可用),否則v將轉換為const對象,然后將調用const函數)。

const成員函數不能在const對象上調用。

因此,為了在實踐中有用,規則必須是在非const對象上調用它,相反,在const對象上調用const成員函數。

這就是規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM