[英]Differrent function signatures C++
發現了一些 C++ 測試,其中一個問題是:function 簽名之間的差異是什么。 我對以下答案是否正確?
void f(data); // 1)calls copy constructor of data to pass in function
void f(data*); // 2)data passes to function by ptr, no copy constructor called
void f(data const*); // 3)same as 2, but not allowed to change pointer, allowed to change data
void f(data* const); // 4)same as 2, but not allowed to change data, allowed to change pointer
void f(data const* const); // 5) same as 2, niether ptr and data can be changed
void f(data&); // 6) same as 2, but ref instead of ptr
void f(data const&); // 7) same as 3
void f(data&&); // 8) Refence to reference(most subtle moment to me), move constructor, depends on function original data can be erased
不完全的:
作為對 8 的附加說明:正如這里已經提到的,沒有像對引用的引用這樣的東西(至少不是作為一個普通的基本 C++ 對象/值類型類別)。 它的確切引用類型取決於使用上下文,但在大多數情況下,它被稱為右值引用。 在非評估模板參數上下文中 - f 是 function 模板並且 date 是類型化模板參數 - 它的引用類型稱為轉發引用。 為了嚴格遵守標准術語,它也不是 Coy Kramer 在這里所說的通用參考,因為出於各種原因,委員會在 2015 年不接受 Scott Meyers 的術語。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.