簡體   English   中英

不同的 function 簽名 C++

[英]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

不完全的:

    1. 不一定要復制。 其他構造函數可用於初始化參數。
    1. 和 4. 是錯誤的方式。
    1. 沒有“參考參考”之類的東西。 那是一個右值引用。 綁定對值的引用時不調用構造函數。

作為對 8 的附加說明:正如這里已經提到的,沒有像對引用的引用這樣的東西(至少不是作為一個普通的基本 C++ 對象/值類型類別)。 它的確切引用類型取決於使用上下文,但在大多數情況下,它被稱為右值引用。 在非評估模板參數上下文中 - f 是 function 模板並且 date 是類型化模板參數 - 它的引用類型稱為轉發引用。 為了嚴格遵守標准術語,它也不是 Coy Kramer 在這里所說的通用參考,因為出於各種原因,委員會在 2015 年不接受 Scott Meyers 的術語。

暫無
暫無

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

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