簡體   English   中英

C ++數組作為函數參數

[英]C++ array as function parameter

using Data = char[10];
void f(Data x)
{
    x = nullptr; // this compiles
}
void g(Data &x)
{
    x = nullptr; // this does not compile, msvc complain "expression must be a modifiable lvalue
}

我很困惑為什么f中的賦值表達式可以編譯,而不會在g中編譯。 我期望這兩種分配都會失敗,因為數組類型不可修改。

任何對c ++標准的引用將不勝感激。

這與功能參數類型調整( [dcl.fct] / 5 )有關:

在確定每個參數的類型之后,將類型為“ T的數組”或功能類型為T的任何參數調整為“指向T的指針”。

由於類型別名與其命名的類型等效,因此在第一種情況下,該類型被確定為char[10]並調整為char* 您可以修改指針。

在第二種情況下,您形成一個char(&)[10] 它是對數組的引用,即使通過引用也無法將數組分配給該數組。

暫無
暫無

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

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